asp.net有没有办法在cookie过期时触发Session_End事件?

时间:2015-05-04 02:32:16

标签: asp.net session cookies

希望这不是一个基本的问题。我想知道就像会话过期时会触发Session_end事件一样,有没有办法使用formsauthentication并且cookie过期然后是否有任何触发的事件?或者是否有可能找出cookie何时过期(而不是在发出新请求时),然后采取自定义操作?

提前致谢

1 个答案:

答案 0 :(得分:0)

我认为没有直接的方式来了解这一点。我们用来在母版页上做这个JavaScript hack。请注意,手动设置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();
        }
    }
}