session heartbeat技巧_不讓session因為timeout而遺失

 


https://careynieuwhof.com/how-to-avoid-a-shrinking-heart-in-leadership/


在之前篇章有介紹藉由webmethod來搭配jQuery呼叫做資料複選功能

ASP.NET下拉選單DropDownList套用jQuery複合選取時的經驗談





其實會有一個功能缺失
因為不是存在viewstate(透過static webmethod也不允許)
而是存於session因此容易會有使用者複選了一些值後想說網頁表單就閒置給她放著
去廁所甚至開會或者吃中餐
超過session保留時間(可能預設的20分鐘也可能其他門檻)
此時就容易導致所選取好的資料遺失

這邊可以藉由 類似心跳的概念
定時每隔30秒呼叫一次ajax請求到server side做一個session再次保存的機制


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script type="text/javascript">
    $(function () {

        //Keep Session Heart Beat
        setInterval(function () {
            //let date = new Date();
            //console.log(date.toLocaleString());
            $.ajax({
                type: "POST",
                url: "AdminMembership.aspx/SessionHeartBeat_NGO_MultiSelect",
                contentType: "application/json;charset=utf-8",
                success: function (data) {
                    if (data.d == "alive") {
                        console.log("session value is still alive");
                    }
                    else {
                        console.log("session value is lost");
                    }
                },
                error: function (xhr, status, error) {
                    console.log(xhr.responseText);
                }
            });
        }, 30 * 1000);

    });
</script>


後端的webmethod

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[System.Web.Services.WebMethod(EnableSession = true)]
public static string SessionHeartBeat_NGO_MultiSelect()
{
    string IsStillAlive = "alive";
    if (System.Web.HttpContext.Current.Session["multiSelectList"] != null)
    {
        List<string> lsMulTiSelect = (List<string>)System.Web.HttpContext.Current.Session["multiSelectList"];            
        System.Web.HttpContext.Current.Session["multiSelectList"] = lsMulTiSelect;
    }
    else
    {
        IsStillAlive = "lost";
    }
    return IsStillAlive;
}





















留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header