[英]What is the best approach to handle session timeouts in asp.net
有多種方法可以處理會話超時,例如加載功能上的“元刷新”javascript。
我想要一些整潔的東西:超時前5分鍾,警告用戶......
我也在考慮只要瀏覽器打開就保持會話開放(仍然需要弄清楚如何做到這一點......可能是一些令人耳目一新的iframe)。
你如何處理會話超時,你認為我應該進入哪個方向?
處理會話超時的最佳方法。
我說有2個基本案例。
一種是當用戶輸入很少或沒有數據,只是閱讀報告,或用他的鼠標做小思考。 在這種情況下,沒有簡單的方法通知他會話即將到期。 如果要檢查調用后面代碼的會話剩余時間,則自動更新會話。 然后,如果你有一個計時器來倒計時,那么用戶可能已經打開了一個新的網頁選項卡,會話將會過期但不是你用javascript記錄的時間,而用戶收到了錯誤的信息。
所以對我來說,當用戶輸入很少或沒有數據時,只要讓會話過期,如果他失去了一次點擊,它將在以后再次進行。
其次是當用戶需要輸入許多數據時 ,一段時間可能需要時間,例如長文本,以便編寫並修復它。 在這種情況下,我使用以下技術,我不會讓會話結束。
如何在瀏覽器中保持會話打開。
這是一個非常好的和簡單的技術,我使用一個圖像,我使用JavaScript在會話超時之前重新加載它。
<img id="keepAliveIMG" width="1" height="1" src="/img/ui/spacer.gif?" />
<script language="javascript" type="text/javascript">
var myImg = document.getElementById("keepAliveIMG");
if (myImg){
window.setInterval(function(){
myImg.src = myImg.src.replace(/\?.*$/, '?' + Math.random());
}, 6000);
}
</script>
在第三種情況下 ,您可以這樣做。 我們關心會話是否僅在回發后過期。 當用戶輸入一些數據並在帖子后面時,應用程序將其重定向到登錄頁面並且帖子丟失。
在第三種情況下, 您可以捕獲發布數據並保存,直到用戶重新登錄。 您可以捕獲global.asax
上的post數據
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
這是在重定向到登錄頁面之前調用的函數,在那里你看到你是否有發布數據和登錄所需的使用,你將那些發布數據,以太保存到一個新的重定向頁面,以太網到服務器(也許在會話,也許在你的臨時數據庫上)。
現在,在用戶再次登錄后,您再次將他重定向到包含已保存的帖子數據的最后一頁,並且用戶將繼續保持原樣。
這里唯一的技巧是制作一個中間頁面,使用最后發布的數據和自動重定向javascript調用來呈現表單。
我唯一能想到的是在頁面上生成一些創建客戶端計時器的腳本,以便在接收和呈現頁面時,它可以在X分鍾后顯示警報(即到期前5分鍾)。
如果您希望會話保持活動狀態,則可以使用通過AJAX定期調用的通用處理程序(ASHX)來執行此操作。 這將有助於刷新會話,只要AJAX調用繼續,它就應該保持活動狀態。
示例“keepalive.ASHX”:
<%@ WebHandler Language="C#" Class="keepalive" %>
using System;
public class keepalive : System.Web.IHttpHandler
{
public void ProcessRequest (System.Web.HttpContext context)
{
context.Response.ContentType = "text/json";
var thisUser = System.Web.Security.Membership.GetUser();
if (thisUser != null)
context.Response.Write("[{\"User\": \"" + thisUser.UserName + "\"}]");
}
public bool IsReusable
{
get { return false; }
}
}
這里是頁面上的腳本來調用它(為了簡單起見使用jQuery):
<script type='text/javascript'>
function keepAliveInterval()
{
$.ajax(
{
url: "keepalive.ashx",
context: document.body,
error: function () {
alert("AJAX keepalive.ashx error :(");
}
});
}
$(document).ready(function () {
window.setInterval('keepAliveInterval()', 60000);
});
</script>
使用一些jquery來關閉web.config中的會話超時變量。 您可以使用此 Jquery延遲技巧,當特定時間發生時(頁面加載后x分鍾),它會在x分鍾內彈出一個div會話超時。 很好,干凈,非常簡單。
關於會話超時,Codesleuth的ajax調用將是完美的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.