2017-02-27 52 views
1

首先抱歉可能有重複。我注意到那裏有很多問題,並且我讀了很多不同的答案。似乎可能有幾個原因讓會話變量不起作用,但給出的答案中沒有一個對我有用。這就是爲什麼我打開另一個問題,並希望你能幫助我。IE和Firefox既不讀取也不刪除php會話變量

我創建了我的Apache2 web服務器以下兩個PHP文件(位於命名爲「ASC-OpenLDAP的」在OpenSuse 13.2虛擬服務器上)

的第一個文件創建會話變量。

test1.php:

<?php 
    session_start(); 
    $_SESSION['test'] = 'test'; 
    header('Location: test2.php'); 
    exit(); 
?> 

第二個文件應讀取會話變量和創建輸出。

test2.php:

<?php 
    session_start(); 
    echo("Test: " . $_SESSION['test']); 
    session_unset(); 
    session_destroy(); 
    exit(); 
?> 

到目前爲止,我已經測試了PROGRAMM在一些瀏覽器。 Vivaldi 1.8正確顯示test2.php中會話變量的內容,而Internet Explorer 11和Firefox 51則不會。

當然cookies是在三種瀏覽器中激活的。

我還檢查了session.save_path中的會話變量文件。所有瀏覽器都會在服務器上生成會話文件。該文件的內容始終爲test|s:4:"test";。但是,只有Vivaldi能夠刪除test2.php中的文件。

正如我PROGRAMM會成爲最終用戶工具,我需要使它的兼容和DAU保存成爲可能。 請幫幫我。

+0

沒有數據存儲在瀏覽器中,它都存儲在服務器端。存儲在瀏覽器中的所有內容都是包含會話ID的cookie。如果某些瀏覽器無法在會話中顯示數據,那麼他們可能不會存儲會話ID cookie,可能是由於您在瀏覽器中設置的cookie政策。 Firefox有一個控制檯,可以向您顯示諸如服務器發送的cookie以及作爲請求的一部分發送的cookie等內容,可能值得檢查以查看會話cookie的情況。 – GordonM

+0

是的。這就是我檢查它的原因。會話日期與每個瀏覽器一起存儲在服務器上,並具有正確的內容。 Firefox控制檯說:'Set-Cookie:'PHPSESSID = 8c5hskk514dlkmpvn16k1mvn41sifcrmnnaadcoofsr979hlkpt1; path =/var/lib/php5 /''我認爲問題更多的在於訪問已存儲的數據,因爲讀取和刪除不適用於IE和Firefox。 – G4schberle

+0

使用Chrome 56時,它也無法正常工作。與Firefox和IE相同的問題。 – G4schberle

回答

0

從我們能夠推斷出這個問題的評論談話,對於會話cookie指定的路徑是不正確的。

與cookie關聯的路徑指定cookie有效的域的哪些部分。例如,如果您只希望cookie的有效期爲www.example.com/foo/bar/,那麼Cookie的路徑應該是/foo/bar/這意味着如果您訪問的URL是www.example.com/foo/bar/或其子路徑,瀏覽器將只在Cookie標頭中包含會話Cookie(例如www.example.com/foo/bar/baz/quux.php)。如果您訪問www.example.com/foo/,那麼cookie將不會被髮送回Cookie標頭中的服務器。

如果您希望讓網站的不同部分擁有不同的會話(例如,如果您在管理部分中的電子商務網站可能希望保留不同的會話數據籃子),但在這種情況下,路徑設置不正確,路徑既不包含test1.php也不包含test2.php。

通過設置session.cookie_path的值(默認情況下它應該是/,但由於某種原因,它不在您的安裝中),您可以在php.ini中指定該路徑來設置路徑。

您還可以使用session_set_cookie_params()以每個腳本爲基礎進行設置。

至於爲什麼它在Vivaldi中工作,最可能的解釋是vivaldi中存在導致cookie上的路徑參數被忽略的錯誤。您可能想要提交一份關於此的錯誤報告。 FireFox/IE/Chrome等的行爲是正確的行爲。