2017-04-14 110 views
0

我正在調試一個php會話,當我上次測試它時,幾個月前。代碼沒有任何改變,但會話現在停止工作。會話數據沒有保存

我已閱讀這裏以及其他文章的多個問題,但沒有建議已經解決了這個問題。我相信我的代碼是正確的,但是當我問的支持在BlueHost的,他們說,這一定是一個代碼問題:

我開始一個會話,並設置一些會話變量:

<?php 
    session_start(); 

$_SESSION["franchise_name"] = $_POST["name"]; 
$_SESSION["db_name"] = $_POST["name"]; 
$_SESSION["franchise_location"] = $_POST["franchise_location"]; 
$_SESSION["franchise_phone"] = $_POST["franchise_phone"]; 
$_SESSION["franchise_address"] = $_POST["franchise_address"]; 
$_SESSION["franchise_email"] = $_POST["franchise_email"]; 

header("Location: session.php"); /* Redirect browser */ 
exit; 

?> 

如果我贊同會話變量立即設置後,一切都很好。好東西。所以我知道本節中的所有內容。

session.php文件看起來是這樣的:

<?php 
ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 
    session_start(); 
echo 'Testing Output:'; 
echo session_status(); 
echo '<pre>'; 
var_dump($_SESSION); 
echo '</pre>'; 
phpinfo(); 
?> 

所以,當我測試,沒有數據在會議通過。在session.php文件輸出爲:

Testing Output:2 
array(0) { 
} 

如果會話數據啓用我還設置了一個測試,看看:

<?php 
// Start Session 
session_start(); 
// Show banner 
echo '<b>Session Support Checker</b><hr />'; 
if (!is_writable(session_save_path())) { 
    echo 'Session path "'.session_save_path().'" is not writable for PHP!<br />'; 
} else { 
    echo 'Session path "'.session_save_path().'" is writable for PHP!<br />'; 

} 
// Check if the page has been reloaded 
if(!isset($_GET['reload']) OR $_GET['reload'] != 'true') { 
    // Set the message 
    $_SESSION['MESSAGE'] = 'Session support enabled!<br />'; 
    // Give user link to check 
    echo '<a href="?reload=true">Click HERE</a> to check for PHP Session Support.<br />'; 
} else { 
    // Check if the message has been carried on in the reload 
    if(isset($_SESSION['MESSAGE'])) { 
     echo $_SESSION['MESSAGE']; 
    } else { 
     echo 'Sorry, it appears session support is not enabled, or you PHP version is to old. <a href="?reload=false">Click HERE</a> to go back.<br />'; 
    } 
} 
?> 

這個測試的結果顯示,會話數據沒有工作這裏要麼會話路徑確實是可寫的。 Phpinfo顯示會話已啓用。

還有什麼我可以試着幫我解決這個問題嗎?謝謝。

更新:我嘗試用會話路徑 ini_set('session.save_path','SOME WRITABLE PATH'); 但這並沒有解決問題。

+0

注意:我將這些確切的文件從bluehost複製到hostgator,並且它們在那裏正常工作。所以它似乎是託管相關,但bluehost說這是我的問題要解決。不知道該怎麼問他們去做。 – WilliamAlexander

+0

也許你有其他要求嗎?在特定情況下,我有一個404頁面正在開始會話。在我的網站中沒有一個圖標,我的瀏覽器正在請求它,並且有兩個請求到達服務器,出現不可預知的行爲。 –

+0

所有的代碼都在上面列出 - 所以我不這麼認爲? – WilliamAlexander

回答

0

從PHP session_start()頁:

注意
要使用基於cookie的會話,session_start()必須之前調用outputing什麼瀏覽器。

刪除session_start()之前的空格,它們被視爲輸出。


更新:

它也可以與會議有關的文件的位置,你可以嘗試設置一個新的位置:

ini_set('session.save_path','/some/safe/path/to/sessions'); 
session_start(); 

確保sessions有適當的權限

+0

沒有解決它。 – WilliamAlexander

+0

我已經更新了我的答案 –

+0

感謝您的更新Pedro - 我應該在我的初始文章中注意到我曾嘗試將會話路徑更改爲我的早期故障排除測試之一。 – WilliamAlexander

0

我打電話給藍色主人 - 這第二個支持人比第一個人更加警覺,並且認識到清漆緩存可能會導致問題。我們禁用它,瞧!固定。