我无法找到这个具体问题。我有一个网站,使用会话变量(在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);
}
答案 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
并允许其成员读取内容。