2017-10-26 7 views
0

--EDIT--PHPセッション。ログインすることができません

問題が見つかりました。 Conycに感謝します。 問題が見つかりました。 mysqli_fetch_assoc($ result)は、読み込める行がなくなったときにnullを返します。これは$ _SESSION ['Id'] = $ row ['Username']のセッションにユーザー名を入れるときに$ rowがnullになることを意味します。あなたはパスワードのように変数にユーザー名を格納しようとします。 - Concy 12分前


現在、ログオンしてコンテンツを表示しようとしています。セッションとハッシュパスワードを利用しています。私は私の人生のために、なぜ私が「ログインしている」ことを表示していないのか理解できません。 mysqlから自分のユーザ名とパスワードを取得することができますが、if(isset($ _ SESSION ['Id']))が私がログインしていないことを表示しています。私はそれがHTML上のセッションと関係があると思いますか?または、セッションIDが間違っている可能性がありますか? Idk。あなたには、私が知りたいと思うアイディアがあれば。私はちょっと新しくphpになっているのでかなり荒いです。

if (password_verify($Userpassword , $storedPassword)) { 
    $sql = "SELECT Username, Password FROM Users WHERE Username = '".$user."'"; 
    if($result = mysqli_query($conn, $sql)) { 
     if (mysqli_num_rows($result) > 0) { 
      while($row = mysqli_fetch_assoc($result)) { 
       $_SESSION['Id'] = $row['Username']; 
       header ("Location: 'mywebsite'); 
       die(); 
      } 
     } 
    } 
} 
+0

本当に答えはありますが、間違った 'header()'を作成したようです。 'header( 'Location:mywebsite');' – Swellar

+0

あなたのpassword_verify関数はどこですか?そして、どのように$ _SESSION ['Id'] = $ row ['Username'];そこで働く。 –

+0

私は最後に 'session_'関数を直接使用していましたが、あなたのビューページで' session_name'をコメントアウトするか、 'session_name( 'Id');'を 'login.php'の先頭に追加してください。 –

答えて

0

あなたは、次のとおりです。ここ

は((password_verify)一部ならば変化する)このコードを試してみてください、私のhtmlページ

<?php 
include 'DbConfig.php'; 
session_name('Id'); 
session_start(); 
session_regenerate_id(); 
?> 

<!DOCTYPE html> 
<html lang="en"> 

        <?php 

         if (isset($_SESSION['Id'])){ 
           echo "you are logged in"; 
          } else { 
           echo "you are not logged in"; 
        } 

        echo json_encode($_SESSION); 
        echo json_encode($_COOKIE); 
        ?> 
         <form method = 'POST' action="./ajax/login.php"> 
         <input type='text' name='User' placeholder='Email'> 
         <input type='password' name= 'Password' 
placeholder='Password'> 
         <button type='submit' name='my_form_submit_button'> 
         <span class='glyphicon glyphicon-log-in'></span> 
&nbsp; Sign In 
         </button> 
         </form> 

         <form method = 'POST' action="./ajax/logout.php"> 
         <button type='submit' name='my_form_submit_button'> 
         <span class='glyphicon glyphicon-log-in'></span> 
&nbsp; Sign Out 
         </button> 
         </form> 


</html> 
+0

私はデフォルトのセッション名 –

+0

あなたのHTMLページからsession_regenerate_id();も削除してみてください。ページをロードするたびに新しいセッションに入れても効果的です。 – Conyc

+0

ええ、私も試しました –

0

私login.phpここ

<?php 
session_start(); 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 

$user = $_POST['User']; 
$Userpassword = $_POST['Password']; 
$password_hash = password_hash($Userpassword, PASSWORD_DEFAULT); 

$storedPassword = ""; 

// Create connection 

$conn= mysqli_connect("$servername","$username","$password") or die ("could 
not connect to mysql"); 
mysqli_select_db($conn, "dpw_recyclopedia") or die ("no database"); 
$sql = "SELECT Username, Password FROM Users WHERE Username = '".$user."'"; 
$result = mysqli_query($conn, $sql); 


if(! $result) { 
    die('Could not select data: ' . mysqli_error($conn)); 
} 

if (mysqli_num_rows($result) > 0) { 
    // output data of each row 
    while($row = mysqli_fetch_assoc($result)) { 
     //echo "user: " . $row["UserName"]. " " . $row["Password"]. "<br>"; 
     $storedPassword = $row["Password"]; 
    } 
} else { 
    echo "User Not Found"; 
} 

if (password_verify($Userpassword , $storedPassword)) { 
    $_SESSION['Id'] = $row['Username']; 
    header ("Location: 'mywebsite'); 
}else { 
    header ("Location: 'mywebsite'); 
    exit(); 

} 

?> 

されています効果的にあなたの2つのページで異なるセッションを使用しています。

あなたは他に何も宣言されていないので、あなたのlogin.phpページがデフォルトのセッション名を使用しながら、

session_name('Id'); 

を使用することにより、「ID」に自分のセッション名を設定し、あなたのHTMLページに

同じセッション名を宣言するか、デフォルトを使用して、同じセッションを共有する必要があるすべてのページでセッション名が同じであることを確認します。

また、あなたはあまりにもそれを削除する必要があります

session_regenerate_id(); 

を使用して、HTMLページのすべてのページロードに新しいセッションに自分を入れています。

$rowは、あなたがセッションに追加しようとする時間によってnullとなりますので、これ以上がある場合また、あなたは(、セッションに追加する前に、一時的な変数で、データベースからmysqli_fetch_assoc()戻りnullをユーザ名を格納してはなりませんフェッチする行)。

+0

いいえ、それはうまくいかないでしょう –

関連する問題