首先,我知道这个问题已经以各种方式被问了很多次。我在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"变量。
我到底错过了什么?
@Fred-ii- 是的,当然,请添加它作为答案,我会选择它,我相信有一天它会帮助其他人。
根据OP的要求:(评论回答)
检查是否为要写入的文件夹设置了适当的权限。
确保您可以写入该文件夹以及系统文件中的会话路径。
- 这绝对是一个权限问题。
我的一个主机允许我创建自定义php.ini
文件并将其放在一个特殊的文件夹中;它只会覆盖您添加的设置,而不会覆盖已经设置的其他设置。
- 看看他们是否也会让你做同样的事情。
这是OP添加错误报告后的问题,并发出以下警告:
警告:session_start(): open(/var/lib/php/session/sess_idfdgs6bmsr3oh1c3hasdutic0, O_RDWR) 失败:权限被拒绝 (13)
未
设置 $_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";
}
?>