1

checkPHP.php:

<?php
    session_start();
    if ($_SESSION['loggedIn'] == "no") {
        echo "not logged in";
    }
    else if ($_SESSION['loggedIn'] == "yes") {
        echo "logged in";
    }
    else if (!isset($_SESSION['loggedIn'])){
        echo "session not set";
    }
?>

<html>

<form id = "form2" method="post" action="checklogin2.php">
    Email:<br />
<input type="text" name="myusername" size = "35"/><br />
    Password:<br />
    <input type="text" name="mypassword" size = "35" /><br />
    <input type="submit" value="Login" /><br />
</form>

</html>

checklogin2.php:

<?php
    session_start();
    $_SESSION['loggedIn'] = "yes";
    header("location:checkPHP.php");
?>

ページを初めてロードしたときに、セッションが設定されていません。しかし、ログインすると、それを yes に設定してから、ユーザーをホームページにリダイレクトすることを想定しています。ただし、どちらの場合も、セッションが設定されていないと言うだけです。したがって、セッションを正しく設定する方法がわかりません。ありがとう!

4

2 に答える 2

0

PHPは、ヘッダーリダイレクトとスクリプトが終了する前にセッション情報を書き込む機会がない可能性があります。これを試して:

 session_start();
 $_SESSION['loggedIn'] = "yes";
 session_write_close();
 header("location:checkPHP.php");  
 exit;

exitクライアントがヘッダーを受け取って逃げる前にスクリプトが何か他のことをする時間があった場合に備えて、すべてのヘッダーリダイレクトの後に明示的なものを追加するのが好きです...

私はまた、人々がこの状況を回避するためにこれを行うのを見ました:

  session_start();
  $_SESSION['loggedIn'] = "yes";
  session_regenerate_id(true);
  header("location:checkPHP.php");  
于 2012-11-16T14:25:08.957 に答える
0

PHP がセッション変数を設定できるようにするには、クライアントを識別できなければなりませんよね? これを達成するために使用されるデフォルトの方法は、セッションの開始時に設定された Cookie を使用することです。セッションが開始された同じページの Location ヘッダーを使用してユーザーをメンバー専用ページにリダイレクトしているように見えるため、PHPSESSID Cookie は設定されません。したがって、ユーザーがメンバー専用ページに到達すると、PHP はユーザーを識別できなくなります。彼らのセッション変数はまだそこにありますが、PHP は見知らぬ人にそれを与えません。:)

基本的に、Set-Cookie ヘッダーを含む HTTP 応答では、プロトコル レベルのリダイレクトではなく、通常の 200 OK 応答である必要があります。それが役立つことを願っています

于 2012-11-16T14:31:04.460 に答える