我有一个网站,使用会话variables(在PHP中)来了解访问者是否进入网站。 如果他是新的,那么我将他redirect到检测到的语言。 但是,如果他不是新的,就让他去任何他想去的地方(甚至是其他语言的网页)。
问题是用于实现这个($ _SESSION [“knownvisitor”])的variables不是持久的。 我已经在其他服务器上testing了同一个网站,它工作的很好,所以我很确定这是一个会话configuration问题。 有问题的服务器是Ubuntu服务器12.04.4与Apache 2.2.22和PHP 5.3.10。
会话存储在“/ var / lib / php5”,我可以看到那里的文件,但它们是空的。 会话文件属于“www-data”,拥有以下权限“-rw ——-”。 另一方面,该目录属于“根”并具有这些权限“drwx-wx-wt”。
在redirect之前,我尝试使用“session_write_close()”,正如一些论坛中的build议,没有运气。 redirect就像“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); }
你说/var/lib/php5/session属于root ,拥有drwx-wx-wt权限。 这意味着所有用户都可以写入目录,但只有root可以读取 。 结果是PHP可以创build会话文件,但是不能返回并在稍后阅读。 这似乎是你的会议失败的原因。
修复所有权和权限,以便www-data可以读写( rwx )。 例如:
chgrp www-data /var/lib/php5/session chmod g+rwx /var/lib/php5/session