【问题标题】:php session variable value is null when hosted to server托管到服务器时,php会话变量值为空
【发布时间】:2012-07-18 13:54:29
【问题描述】:

我在会话中有一个奇怪的问题..这在我本地机器的 WAMP 服务器中工作..我的问题是托管在美国的服务器上它不工作..

我是这样做的:

session_start();
$_SESSION['test'] = 'testing login..';

在我正在做的另一个页面中:

session_start();
echo('my session value is : '.$_SESSION['test']);

但我得到的只是 我的会话值是:

我的会话值没有设置..

我在服务器的 cPanel 中检查了 session.save_path,它显示为 /tmp。

请帮助.. 提前致谢。

【问题讨论】:

  • @sixeightzero 我一直发现他们确实如此。哦,等等,你在问 OP 他的 cookie 是否有效......
  • 也许脚本关闭得很快? (取决于设置变量后发生的情况)。设置变量后尝试 session_write_close()。
  • 你到底在哪里做 session_start()?
  • @Rafael 我把 session_start();在文件的开头。
  • 可能是会话文件未写入文件系统(可用空间不足、权限问题等)。可能是其他东西在创建会话后不久就删除了您的会话。您是否验证(使用 Firebug 或其他方式)您页面上设置 $_SESSION['test'] 变量的 PHPSESSID 与您尝试检索该变量的页面上的 PHPSESSID 相同?

标签: php session session-variables shared-hosting


【解决方案1】:

也许你的脚本死了,因为session_start 失败并显示“标头已发送”?例如,如果您的测试机器和生产服务器没有以相同的方式对新行进行编码,则可能会发生这种情况......

错误可能不会显示在您的生产服务器上,请尝试类似的操作:

ini_set('display_errors', 1);
session_start();

看看你是否得到了有用的东西。

【讨论】:

  • 确保你没有在 Linux 服务器中命名会话变量以数字开头(lime $_SESSION['1ABC']
【解决方案2】:

检查您的session.save_path 的权限。此位置需要 Apache/httpd 用户可写。

还要检查session.save_path 是否包含任何sess_ 前缀文件。

【讨论】:

  • 如何查看权限。我对此有点陌生。
  • 你有命令行权限吗?做ls -la /tmp 此外,如果您的用户是chrooted/tmp 可能不是您的会话处理程序正在寻找的文件。你总是可以尝试像~/sessions 这样的新路径。创建目录,更新ini或脚本,重试。
  • 感谢您的信息。因为我现在不在办公室,所以我会在早上检查。
【解决方案3】:

感谢大家的帮助。

我的问题是 /tmp 文件夹中的安全权限。一旦纠正它就可以工作了。

平均时间不要只对 SESSION id 使用数字(例如 $_SESSION['12345']),因为在 linux 托管它不采用仅数字索引并跳过它。 (所以使用 $_SESSION['ACS12345'])..

【讨论】:

    【解决方案4】:

    php 开始标签必须写在 php 文件的第一行。这个方法帮我解决了这个问题。

    【讨论】:

    • 这是对另一个帖子的评论。
    【解决方案5】:

    看看你创建文件的方式。

    如果您使用自动语言检测功能或类似功能来创建文件,请尝试创建新的 PHP 文件。复制您的代码,然后重试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-24
      • 2017-03-13
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 2015-12-18
      相关资源
      最近更新 更多