我将我的页面从Windows上的EasyPHP移到Linux服务器上,并开发了这个新问题。当我重新加载页面,或点击链接将我带回到会话中应该可访问的那个页面(或另一个页面)时,会话信息将丢失,并且用户已注销。
这段改编自W3
的代码片段似乎说明了这个问题:
<?php
//Thing1.php
session_start();
if (! isset ($_SESSION['views'])) $_SESSION['views']='first load';
else $_SESSION['views']='reloaded';
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
<br>
<a href="thing1.php">Reload this page</a>
</body>
</html>
在EasyPHP上,它最初会显示Pageviews=first load
,但在刷新或点击返回同一页面的链接后,它会始终显示Pageviews = reloaded
。
在我的Linux机器上,它始终显示Pageviews=first load
。这与我打印$_SESSION
数组时的情况一致,该数组始终为空。
Linux框运行PHP 5.3.10-1unbuntu3.6和Apache 2.2; EasyPHP有PHP 5.4.4和Apache 2.4.2。
我想要的是EasyPHP下的行为:对于Linux版本,还要记住$_SESSION
个变量。
由于
答案 0 :(得分:3)
确保在第二页和第一页上调用session_start()
,并确保在调用session_start()
之前没有HTML或PHP输出(回声,打印等)。
答案 1 :(得分:2)
1)查看您的Cookie以查看是否有一个名为PHPSESSID的Cookie。 2)在php.ini文件中查找session.save_path。转到该路径,看看是否看到文件。
如果其中任何一个不成立,则会话配置出现问题。特别是,确保打开会话 - 您可能必须编辑php.ini并修复session.save_path的目录 - 而不是默认的“/ tmp”使用Windows目录,如“c:/ temp”。