2016-10-05 164 views
0

我有基於cpanel的centos服務器。PHP會話變量未設置

我正面臨會話變量問題,通過頁面不可用。

我檢查了所有的服務器設置,但無法知道我錯過了什麼。

<?php 
    session_start(); 
    // index.php 
     echo "session id = " .session_id(); 
     $_SESSION["username"] = "Niraj"; 

     echo '<br />Lets see if session available in page 2 -> <a href="page2.php">page 2</a>';   

     if (!is_writable(session_save_path())) { 
      echo '<br><br><br><br>Session path "'.session_save_path().'" is not writable for PHP!'; 
     } 
     else 
     { 
     echo '<br><br><br><br>Session path "'.session_save_path().'" is writable for PHP!'; 
     } 

?> 

的上述輸出的index.php如下:

session id = 5f59e48f328ef72fda877c8a9f7a07ca 
Lets see if session available in page 2 -> page 2 

Session path "/var/tmp" is writable for PHP! 

如果我刷新頁面,除了會話ID保持不變。使page2.php的

代碼如下:

<?php 
session_start(); 
//page2.php 
echo "session id = " .session_id(); 
echo "<br> Username = " . $_SESSION["username"]; 
?> 

使page2.php的輸出作爲下:

session id =d99088ca0027a483301746e02282662c 
Username = 

問題是用戶名不輸出任何會話值。臨時目錄是可寫的,瀏覽器支持cookies。

我標記,當點擊page2.php,它會顯示新的值在會話ID,是好的或會話ID應該保持所有頁面相同?

我嘗試了一切,並從過去2天開始投入大量的努力, 相同的代碼與其他Windows服務器和會話ID正常工作保持不變,直到我關閉瀏覽器。

感謝

回答

0

session_id()必須保持不變,爲您查詢其設置爲會話ID的數據。會話ID(取決於生命週期值)將一直保留,直到瀏覽器關閉。我懷疑你的瀏覽器阻塞了會導致每次頁面加載時PHP重新生成一個新ID的會話cookie。下載一個你以前沒有用過的瀏覽器,並測試理論,讓我知道你如何繼續。

您可以檢查全局會話cookie值,並查看生命週期設置爲什麼,如果您願意,但我賭它的瀏覽器(0 ==生命週期 - >直到瀏覽器關閉)。

var_dump(session_get_cookie_params()); 

http://php.net/manual/en/function.session-get-cookie-params.php

而且....

你可以只禁用任何插件,你必須特別是那些其停止廣告的喜歡Adblocker等...

0

你有沒有看到什麼奇怪的發生到會話文件/var/tmp?服務器可以刪除它們嗎?

MediaTemple Grid服務器在保存到tmp文件夾時似乎遇到會話問題。我知道你可能沒有使用MediaTemple,但他們的DV服務器運行CentOS,因此它可能與操作系統有關。

https://mediatemple.net/community/products/grid/204643480/why-am-i-experiencing-session-errors

關注他們列出的症狀是「與不似乎在跨網絡請求進行會話的常規問題。「他們的解決方案是通過在php.ini中設置session.save_path並重新啓動Apache來將會話文件從tmp文件夾中取出並存儲到其他位置。