2016-05-12 15 views
1

動作しませんセッションは、私は、ユーザーがログインしていないとして、それが常に表示ログインしているユーザーのセッションで問題を抱えている

のindex.php

<?php 
session_start(); 
if (!isset($_SESSION['email'])) { 
    if (isset($_POST['email']) && isset($_POST['pass'])) { 
     $email = mysqli_real_escape_string($con, $_POST['email']); 
     $pass = mysqli_real_escape_string($con, $_POST['pass']); 
     $sqli = "SELECT * FROM users WHERE email='$email' AND pass='$pass' LIMIT 1"; 
     $result = mysqli_query($con, $sqli); 
     if ($result && mysqli_num_rows($result) == 1) { 
      while ($row = mysqli_fetch_array($result)) { 
       $id = $row['id']; 
       header("Location: home.php?=$id"); 
       exit(); 
      } 
     } 
    } 
} else { 
    header("Location: home.php"); 
} 
?> 
<form action="index.php" method="POST"> 
    <input name="email" type="text"/> 
    <input name="pass" type="password"/> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

そしてhome.phpを持っている:

<?php 
session_start(); 
if (!isset($_SESSION['email'])) { 
    header("Location: index.php"); 
} else { 
    echo "welcome"; 
} 
?> 

私はhome.phpに着くが、その後home.php開始したことがないのセッションのようにindex.phpに戻って私をリダイレクトに私がログインし...

+1

セッションを作成したことはありません。 –

+0

私は、フォーマットから読みやすさを向上させるために何が止まっているのか真剣に疑っています。 –

+1

http://php.net/manual/en/mysqli.error.phpおよびhttp://php.net/manual/en/function.error-reporting.php のリンクを参照して、コードに適用してください。 –

答えて

2

下のコードのコメントを参照してください。あなたはPOST後にセッションを設定するのを忘れて、あなたはここにwhileループを必要としません:

<?php 
session_start(); 
if (!isset($_SESSION['email'])) { 
    if (isset($_POST['email']) && isset($_POST['pass'])) { 
     $email = mysqli_real_escape_string($con, $_POST['email']); 
     $pass = mysqli_real_escape_string($con, $_POST['pass']); 
     $sqli = "SELECT * FROM users WHERE email='$email' AND pass='$pass' LIMIT 1"; 
     $result = mysqli_query($con, $sqli); 
     if ($result && mysqli_num_rows($result) == 1) { 
      /* Authenticated User */ 
      /* Since you are getting only one row, you don't need a `while` loop. */ 
      $row = mysqli_fetch_array($result); 
      $id = $row['id']; 
      /* Actually set the session variable. */ 
      $_SESSION["email"] = $id; 
      header("Location: home.php?=$id"); 
      exit(); 
     } 
    } 
} else { 
    header("Location: home.php"); 
} 
?> 

注:

  1. あなたは$_SESSION値を設定する必要があります。
  2. セキュリティを強化するためにハッシュされたパスワードを使用します。
+1

ああ私はとても愚かです私はそのコードを持っていたとにかく私は私を削除しています....ありがとうとにかく:D – SkyTec

+0

私は受け入れましたなぜ私は$ _SESSION ["email"] = $ idを書いたのだろうと思っています。私はまったく混乱しています...なぜ$ idですか? – SkyTec

+0

@SkyTec何か...何でもいいはずです...あるいは、それを ''電子メール ''で置き換えるか、単に設定する必要があります。正しく設定しないでください... –

1

セッションが存在するかどうかだけを確認する場合は、セッション配列の値を設定する必要があります。

$_SESSION['value'] = 'Item'; 

は、その後に役立ちます、それ

echo $_SESSION['value'] 

希望を取得します。

+0

コードに基づいてコンテキストを提供する方が良いでしょう。 :) –

+0

私は同意する傾向がありますが、セッションは非常に一般的であり、PHP内ではグローバルなので、単にこのような状況には適用されません。だから、彼らの働き方を説明し、彼のためにやってみるほうが有益です。 – Oxid3

0

成功したログインの後にhome.phpのために出発する前にlogin pageの値をindex.phpにするためにSESSIONを設定する必要があります。

の場合は、ログインページ(index.php)にheader("Location: home.php?=$id");の前に$_SESSION['email'] = $idを追加してください。

関連する問題