[英]PHP session not being saved between pages
我剛剛購買了一些新的服務器空間,並且正在將一個非常簡單的 PHP 應用程序遷移到它,該應用程序在我的其他服務器上運行良好。
由於某種原因,session 數據未存儲在新服務器上頁面之間的 $_SESSION 變量中。 我查看了這篇類似的 SO 文章和許多其他文章,試圖解決這個問題。
我可以確認:
這是來自 phpinfo() output 的相關部分:
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 中沒有 output(當然鏈接除外)。
非常感謝您的幫助。
嘗試在腳本結束前顯式關閉 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.';
如果您的 session 文件大小為零,請確保您的服務器上仍有可用磁盤空間。 這就是我遇到的問題。
在 linux 服務器上使用df -h
檢查磁盤空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.