会话不会携带多个页面

时间:2012-11-16 14:17:41

标签: php

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");
?>

第一次加载页面时,未设置会话。但是当我登录时,假设将其设置为是,然后将用户重定向回主页。然而,两次它只是说没有设置会话。所以我想我不确定如何正确设置会话。谢谢!

2 个答案:

答案 0 :(得分: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");  

答案 1 :(得分:0)

要让PHP能够设置会话变量,它必须能够识别客户端,对吧?嗯,用于完成此操作的默认方法是在启动会话时通过cookie设置。由于您似乎正在使用同一页面上的Location标头将用户重定向到该成员的唯一页面,因此将不会设置PHPSESSID cookie。因此,一旦用户到达会员唯一的页面,PHP将无法识别用户。他们的会话变量仍然存在,但PHP不会将它交给陌生人。 :)

基本上,在包含Set-Cookie标头的HTTP响应中,它需要是常规的200 OK响应而不是协议级重定向。 希望有所帮助