【问题标题】:PHP on Linux: can't remember $_SESSION variablesLinux 上的 PHP:不记得 $_SESSION 变量
【发布时间】:2013-04-12 17:51:19
【问题描述】:

我将我的页面从 Windows 上的 EasyPHP 移到了 Linux 服务器上,并开发了这个新问题。当我重新加载页面或单击链接以将我带回到会话中应可访问的页面(或另一个页面)时,会话信息将丢失,并且用户已注销。

这段改编自W3的sn-p代码似乎说明了这个问题:

<?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 变量。

谢谢

【问题讨论】:

  • 当然你想要那个。但是您需要找出是什么阻碍了您首先才能真正解决问题。您需要先解决您的问题。您对会话的工作原理有基本的了解吗?你有没有仔细检查过没有任何东西阻碍你?您是否结束了 PHP 中的错误记录并将级别提高到可能的最高设置?那么错误日志中可能有什么有趣的事情吗?

标签: php apache session


【解决方案1】:

确保session_start() 在第二页和第一页上都被调用,并确保在调用session_start() 之前没有 HTML 或 PHP 输出(回显、打印等)。

【讨论】:

  • 对问题进行了编辑以使其更清晰——此时,只有一页,它首先执行session_start()。这样就处理好了……
  • 啊,抱歉。如果您在测试时硬刷新页面,您不会得到不同的结果吗?
  • 刷新或通过链接加载,无论哪种方式,都没有 $_SESSION 变量。
  • 谢谢!这对我有用......我在 session_start() 之前有 html 标签。我只是把它移到文件的顶部,它工作得很好!
【解决方案2】:

1) 查看您的 cookie 以查看是否有一个名为 PHPSESSID 的。 2) 在 php.ini 文件中查找 session.save_path。转到该路径,看看您是否看到文件。

如果其中任何一个不正确,则说明您的会话配置存在问题。特别是,确保会话已打开 - 您可能需要编辑 php.ini 并修复 session.save_path 的目录 - 而不是默认的“/tmp”,使用 Windows 目录,如“c:/temp”。

【讨论】:

  • 我确实有一个 PHPSESSID cookie。 session.save_path 未在 /etc/php5/apache2/php.ini 或 /etc/php5/cli/php.ini 中设置。 ...所以我将它设置为 /etc/php5/apache2/php.ini 中的 /tmp 并重新启动 apache link。有用!这就是问题所在。谢谢——!
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 2014-03-31
  • 2012-08-30
  • 2017-10-16
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多