会话数据未存储

时间:2015-01-20 16:37:06

标签: php session

首先,我知道这个问题已经多次以各种方式提出过。我在SO上阅读了许多关于此问题的线索,到目前为止,他们都没有帮助过。也许我错过了正确的一个,如果是这样,我很抱歉。

好的,这应该是一个非常简单的测试吧?这是我的整个页面(将?ss添加到查询字符串实际上是这两个页面:

session_start();

if ( isset( $_REQUEST["ss"] ) ) {
    // we're starting the session
    $_SESSION["test"] = "1";
} else {
    var_dump( $_SESSION ); // seriously, test should be set now
}

不幸的是,var转储揭示了这一点:

array(0) { }

这看起来很荒谬。我在chrome中的单独浏览器选项卡中打开了此页面的两个版本,并检查了每个选项卡中PHPSESSID cookie的值,并且它匹配。在第一个选项卡上,我加载了页面的?ss版本,该版本应该启动会话并设置“test”变量。在下一个标签上,我删除了?ss,它应该恢复会话,并且应该保留“test”变量。

我到底错过了什么?

2 个答案:

答案 0 :(得分:2)

  

@ Fred-ii-当然,请将其作为答案添加,我会选择它,我相信它有一天会帮助别人。

根据OP的要求:(评论回答)

检查是否为要写入的文件夹设置了适当的权限。

确保您可以写入该文件夹以及系统文件中的会话路径。

  • 这绝对是一个权限问题。

我的一个主机允许我创建一个自定义php.ini文件并将其放在一个特殊文件夹中;它只会覆盖您添加的设置,并且不会覆盖已设置的其他设置。

  • 看看他们是否也允许你这样做。

这是OP添加error reporting后的问题,发出以下警告:

  

警告:session_start():open(/ var / lib / php / session / sess_idfdgs6bmsr3oh1c3hasdutic0,O_RDWR)失败:权限被拒绝(13)

答案 1 :(得分:0)

如果未设置$ _REQUEST ['ss'],则打印$ _SESSION。它应该是:

<?php

    session_start();



    if ( isset( $_REQUEST["ss"] ) ) {
        // we're starting the session
        $_SESSION["test"] = "1";
        var_dump( $_SESSION ); // seriously, test should be set now
    } else {
        echo "$_REQUEST['ss'] not set";
    }

?>