您將不得不使用某種JavaScript。如果沒有某種客戶端腳本(顯然是JavaScript)來處理請求,服務器就無法更新客戶端Web頁面。我做了類似的事情,詢問用戶是否想通過顯示彈出消息來保持會話的活動狀態。但在你的情況下,你應該創建一個DNN頁面重新登錄,並添加一個自定義模塊或HTML塊,其中包含一個簡單的JavaScript到你想檢查登錄的每個頁面(或放在你的模板頁眉或頁腳中)將用戶重定向到重新登錄屏幕。例如:
function setHeartbeat() {
setTimeout("heartbeat()", 300000); // every 5 min
}
function heartbeat() {
window.location.href = "Relogin.aspx?LastPage=" + window.location.href;
}
然後Relogin.aspx將在頂部有一條消息,表示用戶空閒3分鐘,並提供密碼框。用戶登錄後,您可以將它們重定向回LastPage(自從我使用DNN以來,它一直都很流行,但我認爲有一種方法可以對URL進行格式化,以便自動重定向)。
更方便用戶的選項是在3分鐘後顯示一個彈出窗口,並顯示帶有OK按鈕的消息和密碼字段。
<div id="confirmSession" style="display: none">
<p class="message" style="display: none;"></p>
<p>You have been idle for 3 minutes, if you want to continue your session please re-enter your password.</p>
<p>Password: <input type="password" id="password" /></p>
<input type="button" id="btnContinueSession" />
<input type="hidden" id="userName" value='<%# HttpContext.Current.User.Principal.Identity %>' />
</div>
和下面的JavaScript:同樣,這可以用jQuery的,那就是你有像做
function setHeartbeat() {
setTimeout("heartbeat()", 300000); // every 5 min
}
function heartbeat() {
$("#confirmSession").show();
}
$("#btnContinueSession").click(function() {
$.ajax({
type: "post",
url: "/relogin.aspx",
error: function(returnval) {
// Login failed for some reason, typically page not available 404 error, or code threw an error. so have the user try again.
$(".message").text(returnval + " failure");
$(".message").show();
},
success: function (returnval) {
$("#confirmSession").hide();
setHeartbeat();
}
});
});
在這裏,你必須創建一個relogin.aspx頁面或一些其他服務它將接收用戶名和密碼,重新驗證用戶,如果密碼無效(在上面的jQuery中捕獲並向用戶顯示),則會拋出錯誤。這顯然需要更多工作,並且需要自定義編碼進行驗證,而不是簡單地重定向到登錄屏幕,但它更加便於用戶使用。
在此Ajax方法中,值得注意的是,您的服務器會話超時時間可能不得不超過3分鐘。如果三分鐘或更短時間,並且用戶輸入密碼,則它們已經從服務器註銷,並且您將收到無效的身份驗證錯誤。因此整體重定向到登錄頁面可能是最有意義的。但是,如果用戶輸入的數據保存在cookie中或以某種方式保存,那麼您需要確保這些數據可以重新填充(我聽說有數百人感到沮喪,他們的數據「丟失了」 「)。
例子我從的有:
我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2013-05-08 05:37:11
@JohnSaunders:我需要你的[幫助](http://meta.stackexchange.com/questions/179364/will-tags-in-title-be-passhibited-programmatically-ever):) – abatishchev 2013-05-08 05:40:14
我不這麼認爲問題適用於SO。這不是一個真正的具體的編程問題,而是一個模糊的民意調查設計建議。似乎你真正需要的是更詳細地敲定安全要求。重點關注如何實施這些要求,並詢問在此過程中遇到的問題。 – millimoose 2013-05-13 15:02:58