0
希望這不是一個太基本的問題。我想知道Session_end事件是否在會話過期時被觸發,使用formsauthentication有沒有辦法,並且cookie過期,那麼是否有任何事件被觸發?或者有可能找出cookie何時已經過期(而不是在發出新的請求時),然後採取自定義操作?asp.net有沒有辦法在Cookie過期時觸發Session_End事件?
在此先感謝
希望這不是一個太基本的問題。我想知道Session_end事件是否在會話過期時被觸發,使用formsauthentication有沒有辦法,並且cookie過期,那麼是否有任何事件被觸發?或者有可能找出cookie何時已經過期(而不是在發出新的請求時),然後採取自定義操作?asp.net有沒有辦法在Cookie過期時觸發Session_End事件?
在此先感謝
我不認爲這是一個直接的方式知道這一點。我們用它在母版頁上做這個JavaScript破解。請注意,手動設置CookieExpiryTime。
var timeoutID,
cookieExpiryTime = 20 * 60 * 60; //20 minutes
function HandleSessionExpiry() {
timeoutID = window.setTimeout(function() {
window.location.href = 'http://www.example.com/Login.aspx?action=logout';
}, cookieExpiryTime);
}
window.onload = HandleSessionExpiry;
這工作正常,如果頁面不作出任何Ajax請求,但也有AJAX請求,我們需要編寫全球ajaxStart和ajaxStop兩種功能。 (在這裏使用jQuery)
$(document).ajaxStart(function() {
window.clearTimeout(timeoutID);
});
$(document).ajaxStop(function() {
HandleSessionExpiry();
});
而Login.aspx的Page_Load我們做到了。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if(! String.IsNullOrEmpty(Request.QueryString["!action"])
&& Request.QueryString["!action"] == "logout")
{
Session.Abandon();
}
}
}
這是非常醜陋的黑客攻擊。它更好地執行Ajax調用以瞭解會話是否已過期。 –
@Aniket,我想看看那個代碼。 setInterval似乎是我唯一的方法。你是否建議每秒使用setTimeout調用ajax調用以檢查會話是否已過期? – naveen
我建議擴展或掛鉤'__doPostBack'來檢查會話是否已經過期,然後才啓動實際的回發。 –