session heartbeat技巧_不讓session因為timeout而遺失
在之前篇章有介紹藉由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; } |
留言
張貼留言