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");
?>
第一次加载页面时,未设置会话。但是当我登录时,假设将其设置为是,然后将用户重定向回主页。然而,两次它只是说没有设置会话。所以我想我不确定如何正确设置会话。谢谢!
答案 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响应而不是协议级重定向。 希望有所帮助