我的在線測試管理系統有一個奇怪的問題。如何保持會話活着而不重新加載頁面?
測試表單(test.php)中的一些用戶需要很長時間來回答問題並提交表單。
提交表格的會話過期,用戶必須重新登錄
這不是一個代碼問題
我
ini_set('session.gc_maxlifetime', 18000);
所有頁面的頂部設置這個值後是否有如何刷新會話evrey 10分鐘無需重新加載測試表單中的頁面以防止會話過期?
請幫我
感謝
我的在線測試管理系統有一個奇怪的問題。如何保持會話活着而不重新加載頁面?
測試表單(test.php)中的一些用戶需要很長時間來回答問題並提交表單。
提交表格的會話過期,用戶必須重新登錄
這不是一個代碼問題
我
ini_set('session.gc_maxlifetime', 18000);
所有頁面的頂部設置這個值後是否有如何刷新會話evrey 10分鐘無需重新加載測試表單中的頁面以防止會話過期?
請幫我
感謝
您可以使用JavaScript XHR,或其他稱呼它,AJAX。
使用Ajax,你可以調用PHP腳本,刷新您的會話每隔10分鐘。 :)
這是就我可以去「確切」。
的JavaScript
var refreshSn = function()
{
var time = 600000; // 10 mins
settimeout(
function()
{
$.ajax({
url: 'refresh_session.php',
cache: false,
complete: function() {refreshSn();}
});
},
time
);
};
refresh_session.php
<?php
session_start();
// store session data
if (isset($_SESSION['id']))
$_SESSION['id'] = $_SESSION['id']; // or if you have any algo.
?>
無論如何,另一個解決辦法是隻能用 解決這裏提出
延長了測試頁的會議時間所有你需要的是這樣的(用了jQuery的$。員額):
的JavaScript(把這個你的onload功能或裏面的東西)
setInterval(function(){$.post('path/to/refresh_session.php');},600000); //refreshes the session every 10 minutes
refresh_session.php
<?php
session_start();
if (isset($_SESSION['token'])) { //if you have more session-vars that are needed for login, also check if they are set and refresh them as well
$_SESSION['token'] = $_SESSION['token'];
}
?>
(我知道這跟接受的答案差不多,我真的想評論那個但我還沒有足夠的聲望。
最大的變化是在JavaScript中,你不需要一個完整的功能,只需要一行。)
額外的信息:
雖然我認爲這是不夠的,只是叫session_start()
在PHP中,如果我沒有理解錯的(http://nl3.php.net/function.session-start):
讀回調將檢索任何現有會話數據(以 特殊序列化格式存儲),並將被解序列化並用於 autom當讀取的 回調將已保存的會話數據返回到PHP會話處理時,將原樣填充$ _SESSION superglobal。
在測試過程中,我只將上述代碼放在我的訪問者頁面上,而不是在管理頁面上。但是我在同一個瀏覽器(Chrome)中打開了兩個頁面,並且管理頁面也保持登錄狀態,至少在一個多小時內(不再檢查)。 ,但我不知道它是否仍然有效,如果你只使用session_start()
,沒有在所有手動刷新任何會話-VAR ..
無論哪種方式,我想肯定的是,會話瓦爾我需要真的還在那裏:)
您的「額外信息」似乎並非如此。我有同樣的問題。爲服務器創建一個ajax調用(ping/pong),以保持會話的活躍。每5分鐘測試一次。無論如何,大約2個小時後我都會被取消認證。現在試着改變會議。 –
@FlipVernooij「會話改變方法」是如何去的? –
可能會做一些ajax調用?你能再描述一下你的劇本嗎?可能有些代碼示例會有所幫助:) – Gogol
有趣。我正在處理類似的問題,但我對此事的看法是,應該避免自動重置會話超時,因爲這會有效地創建一個無限的會話,只要瀏覽器窗口打開就會持續。相反,我建議你的最大生命週期應該增加,超時可以根據用戶的操作進行刷新。即使鼠標移動也可以做到這一點,一旦鼠標移動就啓動一個計時器。除非包含某些用戶交互組件,否則會造成較大的安全漏洞。會話旨在過期。 –