2016-04-14 18 views
0

私のログインで問題が発生しました。私が最初にブラウザを開くと、2回ログインしてインデックスにリダイレクトする必要があります。その後、私はログアウトしてログインすることができ、すべて正常に動作します。PHPのログインが意図した通りに動作しない

マイログインコード:

<?php 
include "connect.php"; 

session_start(); 
if (isset($_POST['user_login'])) { 
    $state_on = 1; 
    $state_off = 0; 
    $user = $conn->prepare("SELECT * FROM users WHERE username=:name AND password=:pword AND state=:s"); 
    $user->bindParam(":name", $_POST['username']); 
    $user->bindParam(":pword", $_POST['password']); 
    $user->bindParam(":s", $state_on); 
    $user->execute(); 
    if ($user->rowCount() > 0) { 
     $row_user = $user->fetch(PDO::FETCH_ASSOC); 
     $user_id = $row_user['id_user']; 
     $user_session = $row_user['session_id']; 
     $user_lvl = $row_user['id_lvl']; 
     $update_session = $conn->prepare("UPDATE users SET session_id =:idsession WHERE id_user=:iduser"); 
     $update_session->bindParam(":iduser", $user_id); 
     $update_session->bindParam(":idsession", session_id()); 
     $update_session->execute(); 
     $_SESSION['session_id'] = $user_session; 
     $_SESSION['id_user'] = $user_id; 
     $_SESSION['id_lvl'] = $user_lvl; 

    header("Location: index.php"); 

//  echo 'login = SUCCESS!'; 
    } else { 
//   echo 'login = FAIL!'; 
    } 
} 

、ここでは、私は、インデックスに含める私session.phpです。 PHP

session_start(); 
include "connect.php"; 

$login_session = $_SESSION['session_id']; 
$login_user = $_SESSION['id_user']; 
$login_nvlseg_user = $_SESSION['id_lvl']; 

if (!isset($login_session)) { 
    $conn = null; 
    header('Location: login.php'); 
} 
try { 
    $session_sql = "SELECT * FROM users WHERE session_id=:session"; 
    $stmt = $conn->prepare($session_sql); 
    $stmt->bindParam(":session", $login_session); 
    $stmt->execute(); 
    if ($stmt->rowCount() == 0) { 
     session_unset(); 
     $conn = null; 
     header('Location: login.php'); 
    } 
    } catch (PDOException $e) { 
    // 

    echo "Error: " . $e->getMessage(); 
} 

おかげで

+0

ええ、セッションが設定されている場合は、最初に確認する必要があります。(ログインした) – opHASnoNAME

+0

if(session_status().....で試してみましたが、私は2回ログインする必要があります... – JPeter

+0

最初のログイン時に "SUCCESS"エコーが表示されますか? –

答えて

1

ユーザーが$ _POSTのチェックの前にログインしているかどうかを確認する必要があります。

session_start(); 
if (isset($_SESSION['id_user']) { 
    // redirect 
    header("Location: index.php"); 
} 
+0

速い返信をいただきありがとうございますが、それはうまく動作しません 私が最初にsubmitをクリックしたように、私は再びlogin.phpに行きました。パスワード)を更新しても、私はindex.phpにリダイレクトされました。 – JPeter

+0

フォームを表示する前に、既存のセッションuser_idを確認する必要があります – opHASnoNAME

+0

すでにそれをしましたが、私の奇妙な問題を解決できません – JPeter

1

あなたはこのようなあなたのスクリプトの先頭にsession_startを配置する必要があります:

<?php 
# session_start() should be on top when you using sessions 
session_start(); 
include "connect.php"; 


if (isset($_POST['user_login'])) { 
    $state_on = 1; 
    $state_off = 0; 
    $user = $conn->prepare("SELECT * FROM users WHERE username=:name AND password=:pword AND state=:s"); 
    $user->bindParam(":name", $_POST['username']); 
    $user->bindParam(":pword", $_POST['password']); 
    $user->bindParam(":s", $state_on); 
    $user->execute(); 
    if ($user->rowCount() > 0) { 
     $row_user = $user->fetch(PDO::FETCH_ASSOC); 
     $user_id = $row_user['id_user']; 
     $user_session = $row_user['session_id']; 
     $user_lvl = $row_user['id_lvl']; 
     $update_session = $conn->prepare("UPDATE users SET session_id =:idsession WHERE id_user=:iduser"); 
     $update_session->bindParam(":iduser", $user_id); 
     $update_session->bindParam(":idsession", session_id()); 
     $update_session->execute(); 
     $_SESSION['session_id'] = $user_session; 
     $_SESSION['id_user'] = $user_id; 
     $_SESSION['id_lvl'] = $user_lvl; 

    header("Location: index.php"); 

//  echo 'login = SUCCESS!'; 
    } else { 
//   echo 'login = FAIL!'; 
    } 
} 

私は、これはあなたの問題を解決を願ってい

は、その前にこのような何かそうだろう!

+0

速い返信をいただきありがとうございますが、私はまだ同じ "エラー"を持っています:/ – JPeter

+0

@JPeterは 'session_start();'あなたのスクリプトの上に 'index.php'もあります。私のindex.phpの – Jer

+0

私はsession_start()を作ったsession.phpを含んでいて、session_idを使って1人のユーザしかセッションを使いませんでした – JPeter