1

检查PHP.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 回答