会话变量在PHP5 / Apache2 / Ubuntu12中不是持久的

时间:2014-03-30 16:51:10

标签: php apache session ubuntu session-variables

我无法找到这个具体问题。我有一个网站,使用会话变量(在PHP中)来了解访问者是否进入该网站。如果他是新手,那么我会将他重定向到检测到的语言。但如果他不是新人,你可以让他去任何他想去的地方(甚至是其他语言的页面)。

问题是用于实现此($_SESSION["knownvisitor"])的变量不是持久的。我在其他服务器上测试了同一个网站,它运行得很好,所以我很确定这是一个会话配置问题。有问题的服务器是带有Apache 2.2.22和PHP 5.3.10的Ubuntu Server 12.04.4。

会话存储在/var/lib/php5中,我可以看到那里的文件,但它们都是空的。会话文件属于www-data,并具有以下权限-rw-------。另一方面,该目录属于“root”,并具有这些权限drwx-wx-wt

我尝试在重定向之前使用session_write_close(),正如某些论坛所建议的那样,没有运气。重定向类似于header('Location: [URL]')

有没有人有线索?谢谢!

编辑:我将添加脚本代码,以便您了解它的基本行为。这就是我在网络中所有文件的开头放置的内容:

function detectedlang($availlangs)
{
 // FUNCTION STUFF HERE TO FIND OUT WHICH IS THE LANGUAGE OF THE VISITOR
 return $detectedlang;
}

session_start();

if (!isset($_SESSION["knownvisitor"]))
{
 $detectedlang = detectedlang(array("en", "es"));
 $_SESSION["knownvisitor"] = true;
 header("Location: http://www.mysite.com/".$detectedlang);
}

3 个答案:

答案 0 :(得分:0)

会话仅在session.gc_maxlifetime中定义的时间内存在,我认为20分钟是默认

如果您想查看回访者,则需要设置Cookie

答案 1 :(得分:0)

检查session.save_handler : files 还可以使用error_reporting(E_ALL);

答案 2 :(得分:0)

我得到了解决,感谢serverfault.com的优秀人才。问题是文件夹/var/lib/php5由root拥有,并且其他任何人都无法读取(drwx-wx-wt)。这就是PHP(用户www-data)无法从那里的文件访问和检索会话数据的原因。

组和权限的简单更改使其运行:

chgrp www-data /var/lib/php5
chmod g+rwx /var/lib/php5

换句话说,将目录组更改为www-data并允许其成员读取内容。