簡體   English   中英

在asp.net中處理會話超時的最佳方法是什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM