爲背景,這裏是我的情況:如何(如果可能)設置和取消設置會話變量/停止會話Cookie覆蓋?
我建立一個自託管平臺,爲一個特定的利基,以及該平臺的一部分,登錄過程,如果驗證設置用戶的會話。在每個管理頁面加載時,會話都會啓動並檢查變量$_SESSION['key']
以查看是否爲真。
如果它是錯誤的,用戶會被重定向到登錄頁面,並顯示錯誤提示他們再次登錄。
的問題是,這是依賴於會話cookie被設置或不設置,因爲當會話cookie過期,並在會話開始與session_start()
感檢查$_SESSION['key']
,因此創建具有默認值的新會話cookie(我使用session_set_cookie_params()
來改變路徑,超時等),使得無法重新登錄,因爲會話cookie不會覆蓋我所能看到的內容。
爲了解決這個問題我想過檢查$_SESSION['key']
,這將創建一個5秒的會話cookie時使用類似session_set_cookie_params(5, ..)
session_start()
之前,因此允許重新登錄時要創建一個新的,但我我不確定這是否會起作用 - 而且我也確定必須有一種更有效的方法來設置/取消設置會話變量?
這裏是我的代碼:
啓動會話,如果驗證登錄
if($validated){
session_set_cookie_params(1800, "/inst", $server_name['home']);
session_name("_inst");
session_start();
$_SESSION['key'] = true;
}
檢查$ _SESSION [ '關鍵']仍然是正確的
session_name("_inst");
session_start();
if(!$_SESSION['key']) {
header('Location: ' . $server['home'] . '/login/?error=1');
}
任何答案或建議將太棒了,請問你是否需要澄清任何事情!
我聽到你在說什麼,但是我是否仍然需要取消密鑰設置?我希望在用戶需要重新登錄之前爲用戶提供最長的登錄時間(例如12小時)。如果我不改變默認的cookie參數,我將如何能夠做到這一點?我很抱歉,如果我沒有說清楚,我現在意識到我沒有真正提到爲什麼我使用'session_set_cookie_params()'函數。底線是,除非讓會議下降,否則我需要每12小時取消設置/設置'$ _SESSION ['key']'變量。 – Avicinnian
你應該在php.ini中設置cookie生命週期,所以它在所有頁面中都是全局的,這樣所有的session_start()調用都會在適當的過期時間內創建一個新的cookie(如果需要的話)。您還必須確保PHP的會話垃圾收集器在12小時內不會啓動(還有更多。ini設置也是如此),否則你最終還是會得到有效的會話cookie,但沒有匹配的會話文件,因爲PHP已經清理了它。 –
啊,我沒有意識到PHP有一個會話垃圾收集器。在這種情況下,我會簡單地使用默認值。此外,我完全不符合會話cookie背後的邏輯,我沒有想到意識到儘管您不能覆蓋它的參數,但您仍然可以更改其密鑰的值。我會接受你的回答,因爲它確實有意義,現在我已經考慮過了。 – Avicinnian