2012-07-19 153 views
0

我每次加載新頁面時都會重置會話變量。PHP會話變量在每次加載頁面時重置

我已經包含在最高層,像這樣一個header.php文件與session_start()功能每個腳本:

session_start(); 
error_reporting(E_ERROR); 

我還檢查,以確保session_id是所有網頁上的相同,它是。

我檢查了我的虛擬主機的php_ini配置文件,我看到session.save_path被設置爲/tmp。我改變它爲/var/lib/session/像有人在這個網站上建議,我開始在我的代碼中得到奇怪的警告。

警告:在session_start()[function.session啓動]:打開(在/ var/lib中/ PHP /會話// sess_97fca6d21c7ffa8333cd42eaa87f2eac,O_RDWR)失敗:權限被拒絕(13)/家/ mforsyth /public_html/Beesting/header.php

我不知道該做些什麼來解決這個問題。任何幫助都會有用。如果需要更多細節,請告訴我。

編輯:我已經改變了文件夾回到/ tmp,並確保我可以讀/寫入它,我可以。我也在每個頁面上都回顯會話ID,並且它們都是一樣的。此外,它似乎只會持續一頁

+2

好像你對文件夾'/ var/lib/session /'沒有適當的權限。 – ThinkingMonkey 2012-07-19 21:52:05

+0

您的瀏覽器用戶(通常爲'www-data'或'apache')應該具有對用於會話存儲的目錄的寫入權限。 – spacediver 2012-07-19 21:55:24

回答

2

會發生什麼情況是php試圖跟蹤您的會話與它寫入到ThinkingMonkey提到的目錄的一些信息。

由於目錄不能被php/webserver進程的用戶寫入,因此失敗。因此你不會得到一個會話。

找出哪個用戶正在運行該進程,並授予他該目錄的讀/寫權限。

1

感謝您的幫助。在進一步調查並與我的主持人討論此事後,我發現這個問題並不是寫入/ tmp文件夾的能力。事實上,問題真的在於我的header.php包含文件中有一個javascript函數。

function logout() 
{ 
    <? 
session_destroy(); 
?> 
alert("you have been logged out"); 
} 

它避免了它在一個函數中的事實,可能是我的錯誤,看看這兩種語言是如何編譯的。我做了一個簡單的Ajax調用來處理會話摧毀,現在一切都很順利。我想知道有沒有其他人有類似的問題,如果這有助於他們。

+0

Javsscript和PHP是相互排斥的語言,在PHP中除了PHP標籤中的部分外,JS函數將被忽略,因此,當php導致該腳本時,該部分將始終爲真。在JS進行查看之前,PHP將始終加載並運行。 – Martin 2017-01-11 01:42:03

0

有相同的一般問題,原因是我用JavaScript來刪除會話cookie。

document.cookie = '[session_name]' +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';