【问题标题】:PHP sessions *not always* workingPHP 会话*并不总是*工作
【发布时间】:2012-06-27 23:29:54
【问题描述】:

我最近将一堆网站迁移到了一个新的 VPS,但我在 PHP 会话方面遇到了很多麻烦。所有网站的配置方式几乎都相同,但有一个网站的会话并不总是有效。让我烦恼的是它有点随机。我可以去网站,登录,会话会正常工作。然后,一个小时后我回去,尝试用同一个帐户登录,但它不再保留我的会话。

VPS 在 CentOS 5.8 上运行,它具有 PHP 5.4.3。我应该提一下,在迁移之前,该网站是在 PHP 5.3 上运行的。

我检查了 session.save.path 并没有问题。我什至可以看到会话文件(具有正确的用户和所有内容),但是当会话不工作时它们是空的,这是有道理的。但是为什么有时会起作用,有时却不起作用?我很难弄清楚这一点。

【问题讨论】:

  • 您在使用它们的每个页面顶部都有session_start(); 吗?
  • 是的,我愿意。事实上,当会话工作时,我可以毫无问题地进入任何页面。如果他们不这样做,我就无法在不丢失会话的情况下继续浏览单个页面。
  • 嗯...在浏览器中是否有在旧服务器上查看时留下的任何 cookie?它们会引起怪异。
  • 另外(抱歉这样的评论)...确保会话路径是可写的?正确的用户/组所有权等?
  • 会话绑定到域,例如 abc.com 和 www.abc.com 是分开的。你确定你在代码中到处使用完全相同的路径吗?

标签: php session vps


【解决方案1】:

会话需要服务器磁盘空间来保存服务器是否有磁盘空间来保存会话?我们在一个 linux 机器上遇到问题,由于其分区已用完磁盘空间,会话停止保存。

【讨论】:

  • 感谢您的回答。好猜测,我忘了检查。不幸的是,这不是问题。我的 VPS 上还有很多空间,并且我配置了网站(在我的 Plesk 面板中),以便它可以在服务器上使用尽可能多的空间。
【解决方案2】:

检查您的 php.ini,执行 phpinfo() 并查看会话是如何配置的...特别注意 session.gc_maxlifetime 设置。

http://php.net/manual/en/session.configuration.php

【讨论】:

  • 所有设置都非常类似于默认的 php 设置,除了一件事:session.gc_divisor 设置为 1000 而不是默认的 100。我不确定它实际上做了什么。跨度>
  • 为后代... session.gc_divisor 加上 session.gc_probability 定义了 gc(垃圾收集)过程在每次会话初始化时启动的概率。概率是通过使用 gc_probability/gc_divisor 计算的,例如1/100 表示 GC 进程有 1% 的机会在每个请求上启动。 session.gc_divisor 默认为 100。@Y0lk
【解决方案3】:

我们也遇到过这个问题。 我们通过在服务器的 php.ini 中将 session.auto_start = 0 更改为 session.auto_start = 1 来解决它。我不知道为什么,但它解决了我们的问题。我们仍在调查为什么这样做有效,以及这样做的后果是什么。

【讨论】:

    【解决方案4】:

    有时我也遇到同样的问题,我的一台专用服务器安装了 PHP 5.4.3。

    具有讽刺意味的是,当我清除浏览器缓存时(一切从头开始)。

    效果很好。

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 2011-08-16
      • 2012-02-13
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 2013-03-21
      相关资源
      最近更新 更多