我刚刚购买了一些新的服务器空间,我正在将一个非常简单的PHP应用程序迁移到其他服务器上。
由于某种原因,会话数据未存储在新服务器上的页面之间的$ _SESSION变量中。我看过this similar SO article和其他许多人试图解决这个问题。
我可以确认:
这是来自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
我已经联系了托管公司,他们不会调查它,因为他们说这是一个软件问题而且它不是托管帐户。 Grrrrr ...
这样你就可以看到一些不起作用的代码,我从我链接到的文章中窃取了代码:
// 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中没有输出(当然除了链接)。
非常感谢您的任何帮助。
答案 0 :(得分:7)
在脚本结束前尝试explicitly closing the session;也许你看到一些错误信息。
<?php
error_reporting(E_ALL); ini_set('display_errors', true);
session_start();
echo '<a href="?', time(), '">refresh</a>', "\n";
echo '<pre>';
echo 'session id: ', session_id(), "\n";
$sessionfile = ini_get('session.save_path') . '/' . 'sess_'.session_id();
echo 'session file: ', $sessionfile, ' ';
if ( file_exists($sessionfile) ) {
echo 'size: ', filesize($sessionfile), "\n";
echo '# ', file_get_contents($sessionfile), ' #';
}
else {
echo ' does not exist';
}
var_dump($_SESSION);
echo "</pre>\n";
$_SESSION['ID'] = "112233";
$_SESSION['token'] = "mytoken";
session_write_close();
echo 'done.';
答案 1 :(得分:1)
如果会话文件的大小为零,请确保服务器上仍有可用的磁盘空间。这就是我遇到的问题。
在Linux服务器上使用df -h
检查磁盘空间。