Php 有时会话变量停止工作
我已经吃过两次了。突然,我的登录系统停止工作,通过调试,我发现$\u会话变量在登录过程中无法生存。然后,在没有明显原因的情况下,它恢复工作。以下是流程:Php 有时会话变量停止工作,php,session,session-variables,Php,Session,Session Variables,我已经吃过两次了。突然,我的登录系统停止工作,通过调试,我发现$\u会话变量在登录过程中无法生存。然后,在没有明显原因的情况下,它恢复工作。以下是流程: 用户登录到index.html,表单提交到login.php login.php执行基本的健全性、isset和空检查,然后使用数据库检查凭据。如果电子邮件地址和密码正确(即存在于数据库中),请将其放入$\u SESSION变量中,并将用户重定向到home.php home.php检索$\u会话变量。在这里它失败了 第二次(几分钟前)我读了更多关
index.html
,表单提交到login.php
李>
login.php
执行基本的健全性、isset和空检查,然后使用数据库检查凭据。如果电子邮件地址和密码正确(即存在于数据库中),请将其放入$\u SESSION
变量中,并将用户重定向到home.php
home.php
检索$\u会话
变量。在这里它失败了第二次(几分钟前)我读了更多关于它的文章,发现一个论坛帖子,我在上次没有读过(当会话变量再次工作时,我停止了阅读),上面说你需要
尝试会话写入关闭()代码>在脚本结束的所有位置,如退出代码>die()代码>和页面结束。我发现这是一个特定于浏览器的问题。我认为,这是由谷歌浏览器造成的,因为当我使用移动Safari或Mozilla Firefox测试会话时,它就消失了。虽然在高级设置中我可以看到PHPSESSID
cookie,但它没有拾取会话
重要编辑
我错了。Mozilla也开始停止会话。在我删除会话(session\u destroy()
)后,它再次工作。因此,我的猜测是,在服务器上的会话过期之后,浏览器仍然具有PHPSESSID
cookie。如果它将其发送到服务器,服务器将找不到会话,而只是在$\u session
中放置一个空数组,使我不知所措。我希望这能帮助有同样问题的人。如果您提供代码片段,就可以很容易理解您的问题。您的浏览器可能会导致此问题,就像它正在丢失跟踪会话的cookie一样。某些反病毒或其他东西可能会导致此问题。一个快速的测试是在其他系统上尝试相同的站点,也可以在其他网络上尝试。谢谢你的回答。我正在努力。这是为什么?我刚读过。阿拉斯,没用<代码>标题(“设置Cookie:PHPSESSID=“.session_id()”;路径=/”代码>两者都没有。您是否调用session\u write\u close()代码>在发送头()之前?啊,对不起,我不知道我必须按那个顺序做。没主意。。在浏览器中检查cookie是否已设置并检查到期日期。真奇怪。。。就像。。。在登录之前删除会话可以解决问题吗?
function assertUserLogin() {
try {
$user = new User($_SESSION['email'], $_SESSION['pwd']);
} catch(Exception $ex){
writeToLog("Exception: " . $ex->getMessage());
header("Location: http://www.korilu.nl/maurits/anw?requested:" . $_SERVER["REQUEST_URI"]);
}
writeToLog($user->email . " logged in\n");
return $user;
}
<?
session_start();
$user = assertUserLogin();
?>
function writeToLog($string) {
$log = fopen("log.txt", "w");
fwrite($log, $string);
fclose($log);
}