Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有时会话变量停止工作_Php_Session_Session Variables - Fatal编程技术网

Php 有时会话变量停止工作

Php 有时会话变量停止工作,php,session,session-variables,Php,Session,Session Variables,我已经吃过两次了。突然,我的登录系统停止工作,通过调试,我发现$\u会话变量在登录过程中无法生存。然后,在没有明显原因的情况下,它恢复工作。以下是流程: 用户登录到index.html,表单提交到login.php login.php执行基本的健全性、isset和空检查,然后使用数据库检查凭据。如果电子邮件地址和密码正确(即存在于数据库中),请将其放入$\u SESSION变量中,并将用户重定向到home.php home.php检索$\u会话变量。在这里它失败了 第二次(几分钟前)我读了更多关

我已经吃过两次了。突然,我的登录系统停止工作,通过调试,我发现$\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);
        }