簡體   English   中英

PHP session 未在頁面之間保存

[英]PHP session not being saved between pages

我剛剛購買了一些新的服務器空間,並且正在將一個非常簡單的 PHP 應用程序遷移到它,該應用程序在我的其他服務器上運行良好。

由於某種原因,session 數據未存儲在新服務器上頁面之間的 $_SESSION 變量中。 我查看了這篇類似的 SO 文章和許多其他文章,試圖解決這個問題。

我可以確認:

  1. session 的東西在我的其他網站上運行良好。 我查看了由 session.save_path 定義的目錄,其中有大量 session 文件(在舊服務器上)。
  2. 我在頁面末尾回顯了 $_SESSION 變量的內容,它保存了正確的數據,只是沒有被保存。
  3. 我為每一頁都回顯了 session_id() 並得到了相同的 output。
  4. 我查看了新服務器的 session.save_path 文件夾(/usr/lib/php/session)指定的文件夾,里面沒有任何文件。 我檢查了權限,它設置為 drwxrwx---,這應該意味着 php 程序可以寫入,對吧?
  5. 我沒有 .htaccess 文件。
  6. 我正在運行 CentOS 5.5

這是來自 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM