【发布时间】:2011-07-05 14:14:50
【问题描述】:
我刚刚购买了一些新的服务器空间,并且正在将一个非常简单的 PHP 应用程序迁移到它,该应用程序在我的其他服务器上运行良好。
由于某种原因,会话数据没有存储在新服务器上页面之间的 $_SESSION 变量中。我查看了this similar SO article 和许多其他人,试图解决这个问题。
我可以确认:
- 会话内容在我的其他站点上运行良好。我查看了 session.save_path 定义的目录,里面有很多会话文件(在 OLD 服务器上)。
- 我在页面末尾回显了 $_SESSION 变量的内容,它保存了正确的数据,只是没有被保存。
- 我为每个页面都回显了 session_id() 并获得了相同的输出。
- 我查看了新服务器的 session.save_path 文件夹 (/usr/lib/php/session) 指定的文件夹,其中没有任何文件。我检查了权限,它设置在drwxrwx---,这应该意味着php程序可以写入它,对吧?
- 我没有 .htaccess 文件。
- 我正在运行 CentOS 5.5
这是来自 phpinfo() 输出的相关部分:
Session Support enabled
Registered save handlers files user
Registered serializer handlers php php_binary wddx
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php/session /var/lib/php/session
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0
我已联系托管公司,他们不会调查,因为他们说这是软件问题,而不是托管帐户。呜呜呜……
为了让您可以看到一些不起作用的代码,我从我链接到的文章中窃取了代码:
// info.php
<?
session_start();
$_SESSION['ID'] = "112233";
$_SESSION['token'] = "mytoken";
print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="info2.php">info 2</a>
还有一个使用以下代码调用 info2:
// info2.php
<?
session_start();
print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="info.php">info</a>
结果是在 info.php 中打印数组数据,但在 info2.php 中没有输出(当然除了链接)。
非常感谢您的任何帮助。
【问题讨论】:
-
任何标题问题,您是否使用 error_reporting(-1) 来获得最大的错误消息?
-
@Marek - 除了检查 php.ini 文件中的 session.save_path 是否正确设置之外,我会在该帖子中找到所有内容。但我现在也这样做了。
-
@krifur - 我现在已通过 error_reporting(E_ALL) 明确设置错误报告。不幸的是,我没有收到任何错误消息。
-
对不起,错过了你的帖子。你能在 Apache/PHP 日志中看到一些东西吗?你用的是什么 PHP 版本?
标签: php session configuration