我的网站无法正确保存 PHP 会话,我最初在 SO 上发布过,但这越来越像是服务器问题。所以,我想我应该在这里重新表述一下这个问题。
为什么会这个 PHP 服务器配置无法保存和检索会话?
其中一个关键症状似乎是 PHP 没有在 中创建任何文件/var/lib/php/session
。以下是服务器当前的权限:
$ ls -al /var/lib/php/session/
total 28
drwxrwx--- 2 root apache 24576 Jul 20 13:30 .
drwxr-xr-x 3 root root 4096 Jul 20 13:30 ..
以下是一些测试 URL。第一个链接创建会话数组并打印输出,第二个链接仅打印会话输出,但不幸的是它是空白的。
http://barbadospropertylist.com/wp-content/plugins/gravitymeta/test.php?name=value
http://barbadospropertylist.com/wp-content/plugins/gravitymeta/test.php
答案1
我看到您正在为 apache 使用 nginx 和端口 7080。
如果您的架构包含多个 apache 服务器和某种负载平衡,那么您必须采取一些措施以便在多个 apache 服务器(memcached、巧妙的负载平衡、nfs、mysql 等)之间共享会话。
编辑#1
恕我直言,由于您只有一个 Web 服务器,因此现在没有理由尝试使用 memcached 来存储会话。
在某个时候,你设法将 php 配置为使用文件来存储会话,但会话文件没有被有效地写入 /var/lib/php/session
这就是为什么当您从一个页面跳转到另一个页面时会丢失会话的原因。
/var/lib/php/session 权限通常没有问题,并且会话在大多数 linux 和 bsd 发行版中都可以正常工作。
要检查权限是否正确,请执行以下操作:
步骤 1:检查 php 是否已配置为使用调用 phpinfo() 的 url 写入 /var/lib/php/session。您应该会得到类似以下内容的信息:
Registered save handlers => files user
session.save_path => /var/lib/php/session
步骤 2:使用 ps 并查看配置文件检查 apache 在哪个用户下运行。
您应该获得 apache 、 www 、 www-data 或 http 。
第3步:
检查 apache 用户是否对会话路径具有写权限。可以通过输入 ls -ld /var;ls -ld /var/lib;ls -ld /var/php;ls -ld var/lib/php/session 来完成此操作
或者通过使用 apache 用户有效地创建文件
su - www -s /bin/bash 或 su -m www
然后
触摸 /var/lib/php/session/test
如果权限不是问题,我们可以尝试其他方法