2015-05-04 91 views
0

希望這不是一個太基本的問題。我想知道Session_end事件是否在會話過期時被觸發,使用formsauthentication有沒有辦法,並且cookie過期,那麼是否有任何事件被觸發?或者有可能找出cookie何時已經過期(而不是在發出新的請求時),然後採取自定義操作?asp.net有沒有辦法在Cookie過期時觸發Session_End事件?

在此先感謝

回答

0

我不認爲這是一個直接的方式知道這一點。我們用它在母版頁上做這個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(); 
     } 
    } 
} 
+0

這是非常醜陋的黑客攻擊。它更好地執行Ajax調用以瞭解會話是否已過期。 –

+0

@Aniket,我想看看那個代碼。 setInterval似乎是我唯一的方法。你是否建議每秒使用setTimeout調用ajax調用以檢查會話是否已過期? – naveen

+0

我建議擴展或掛鉤'__doPostBack'來檢查會話是否已經過期,然後才啓動實際的回發。 –

相關問題