簡體   English   中英

如何在asp.net 3.5中盡可能長時間地保留會話

[英]how to alive session as long as possible in asp.net 3.5

我正在使用asp.net 3.5。 我只想盡可能長久地保持會話狀態(瀏覽器關閉)。 在這里,我只是按照以下步驟操作:

1)會話超時值更改為Web配置失敗。 2)使用一些外部.ashx文件,並在母版頁上使用javascript進行調用,如下所示:

<%@ WebHandler Language="C#" Class="SessionHeartbeat" %>

using System;
using System.Web;
using System.Web.SessionState;
public class SessionHeartbeat : IHttpHandler, IRequiresSessionState
{
   public void ProcessRequest(HttpContext context)
    {
        context.Session["Heartbeat"] = DateTime.Now;
    }

    public bool IsReusable {
        get {
            return false;
        }
    }
 }

此javascript在母版頁:

     <script type="text/javascript">
    function setHeartbeat() {
    setTimeout("heartbeat()", 300000); // every 5 min
}

function heartbeat() {
     $.post(
        "../SessionHeartbeat.ashx?Timestamp" + new Date().toString()",
        null,
        function(data) {
            //$("#heartbeat").show().fadeOut(1000); // just a little "red flash" in the corner :)
            setHeartbeat();
        },
        "json"
    );
}
</script>

但這並沒有給我我想要的結果。 請幫我...

------------------------------------ Upadated ------------- --------------------------

在這里我修改我的jQuery:

 <script type="text/javascript">
    function setHeartbeat() {
    setTimeout("heartbeat()", 300000); // every 5 min
}

function heartbeat() {
     $.get(
        "../SessionHeartbeat.ashx",
        null,
        function(data) {
           beatHeart(2); // just a little "red flash" in the corner :)
            setHeartbeat();
        },
        "json"
    );
}
// beat the heart 
// 'times' (int): nr of times to beat
function beatHeart(times) {
    var interval = setInterval(function () {
        $(".heartbeat").fadeIn(500, function () {
            $(".heartbeat").fadeOut(500);
        });
    }, 1000); // beat every second

    // after n times, let's clear the interval (adding 100ms of safe gap)
    setTimeout(function () { clearInterval(interval); }, (1000 * times) + 100);
}
</script>

---------------------------------- Upadted --------------- -------------------------

在此處輸入圖片說明

這是OP的工作示例。

Web.config-設置較小的超時以進行測試

<sessionState mode="InProc" timeout="2"/>

Javscript (在此示例的頁面中)

<script type="text/javascript">
    var interval = null;
    (function() {
        // keep me alive
        interval = setInterval(function (){
            $.get('keepalive.ashx', function (d) {
                $('#response').append(d + '<br/>');
            });
        }, 30000);
    })();


 // If we want to stop the interval....
    function Stop() {
        clearInterval(interval);
    }
</script>

這會在名為response的元素中打印sessionId,以便我們可以看到會話ID。

keepalive.ashx通用處理程序(需要System.Web.SessionState)

public class keepalive : IHttpHandler, IRequiresSessionState {

    public void ProcessRequest (HttpContext context) {
        if (context.User.Identity.IsAuthenticated)
        {
            // authenticated sessions
            context.Response.ContentType = "text/plain";
            context.Response.Write("Auth:" + context.Session.SessionID);
        }
        else
        {
            // guest
            context.Response.ContentType = "text/plain";
            context.Response.Write("NoAuth:" + context.Session.SessionID);
        }
    }

注意:沒被問到的一件事是您的keepalive是否應該在經過身份驗證的會話上運行? 如果是這樣,我想知道是否還有cookie過期問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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