关闭浏览器时的会话超时

保罗·扎赫拉

我正在使用以下代码来检测会话到期:

public class SessionActionFilterAttribute : ActionFilterAttribute
{
    /// <summary>Called by the ASP.NET MVC framework before the action method executes.</summary>
    /// <param name="filterContext">The filter context.</param>
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // The following code is used for checking if a session has timed out. The default timeout value for ASP.NET is 20mins.
        // The timeout value can be overriden in the Web.config file using the sessionState tag's timeout attribute.
        // <sessionState timeout="5"></sessionState>
        // Check for an existing session.
        if (null != filterContext.HttpContext.Session)
        {
            // Check if we have a new session.
            // IsNewSession cannot discern between: is it a new visitor with fresh session, or an existing visitor with expired session.
            if (filterContext.HttpContext.Session.IsNewSession)
            {
                string cookieHeaders = filterContext.HttpContext.Request.Headers["Cookie"];

                // Check if session has timed out.
                // Does session cookie exist, if so ASP.NET session is expired
                if ((null != cookieHeaders) && (cookieHeaders.IndexOf("ASP.NET_SessionId") >= 0))
                {
                    if (filterContext.HttpContext.Request.IsAuthenticated)
                    {
                        FormsAuthentication.SignOut();
                    }

                    // Redirect to login.
                    filterContext.Result = new RedirectToRouteResult(
                                                                    new RouteValueDictionary 
                                                                    { 
                                                                        { "controller", "Account" }, 
                                                                        { "action", "Index" },
                                                                        { "timeout", "True"}
                                                                    });
                    return;
                }
            }
        }

        // Else continue with action as usual.
        // Session is not expired and function will return false, could be new session, or existing active session
        base.OnActionExecuting(filterContext);
    }
}

哪个可以正常工作...

当用户登录并在会话超时(不注销)之前关闭浏览器时...

然后尝试再次查看该站点并在会话超时后重新登录,它会不断重定向到登录页面,即上面的代码认为该会话已经连续过期,但是我猜测出于某种原因Cookie保持为“过期”。

这里有我想念的东西吗?

PS我在web.config中使用以下内容

<sessionState timeout="1"></sessionState>
保罗·扎赫拉

Gah...。我在重定向之前添加了以下内容,似乎已解决了该问题....只是进行了一些测试才能确定:

if (filterContext.HttpContext.Request.Cookies["ASP.NET_SessionId"] != null)
{
    filterContext.HttpContext.Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddDays(-1);
}

filterContext.HttpContext.Session.Abandon();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

刷新/浏览器关闭后的角度重用会话

来自分类Dev

当浏览器关闭时,阻止会话过期

来自分类Dev

Rails 4:当浏览器关闭时,会话值永远不会“过期”或消失

来自分类Dev

Passport会话不会在浏览器关闭时被破坏

来自分类Dev

关闭浏览器时会话超时

来自分类Dev

PHP-关闭浏览器后会话销毁

来自分类Dev

浏览器关闭时销毁会话-Ruby on Rails

来自分类Dev

关闭标签页/浏览器时触发Angularjs事件

来自分类Dev

在智能手机上关闭Chrome浏览器时,会话Cookie不会过期

来自分类Dev

当浏览器关闭时,PHP会话Cookie会过期

来自分类Dev

记住关闭浏览器时的Django allauth社交登录

来自分类Dev

关闭浏览器时正在擦除数据。

来自分类Dev

关闭浏览器时的通知

来自分类Dev

当浏览器在MVC中关闭时,阻止会话过期

来自分类Dev

Rails 4:当浏览器关闭时,会话值永远不会“过期”或消失

来自分类Dev

PHP-关闭浏览器后会话销毁

来自分类Dev

浏览器关闭时销毁会话-Ruby on Rails

来自分类Dev

从远程会话粘贴时,谷歌浏览器崩溃

来自分类Dev

关闭浏览器窗口后,如何防止Google Chrome浏览器删除会话Cookie?

来自分类Dev

关闭浏览器或标签浏览器时,使用OWIN关闭会话

来自分类Dev

继续会话,即使我关闭浏览器

来自分类Dev

ASP.Net MVC C#在会话超时/浏览器关闭时发送通知

来自分类Dev

Microsoft Edge(仅)在关闭浏览器时未结束会话?

来自分类Dev

关闭浏览器时 ASP.NET 不清除 cookie 会话

来自分类Dev

express-session 在浏览器关闭时更改会话

来自分类Dev

浏览器关闭时会话到期

来自分类Dev

Asp.net-在会话超时或浏览器关闭后运行全局方法

来自分类Dev

Flask 会话 cookie 不会在浏览器关闭时持续存在

来自分类Dev

Python关闭时如何退出网络浏览器会话?

Related 相关文章

  1. 1

    刷新/浏览器关闭后的角度重用会话

  2. 2

    当浏览器关闭时,阻止会话过期

  3. 3

    Rails 4:当浏览器关闭时,会话值永远不会“过期”或消失

  4. 4

    Passport会话不会在浏览器关闭时被破坏

  5. 5

    关闭浏览器时会话超时

  6. 6

    PHP-关闭浏览器后会话销毁

  7. 7

    浏览器关闭时销毁会话-Ruby on Rails

  8. 8

    关闭标签页/浏览器时触发Angularjs事件

  9. 9

    在智能手机上关闭Chrome浏览器时,会话Cookie不会过期

  10. 10

    当浏览器关闭时,PHP会话Cookie会过期

  11. 11

    记住关闭浏览器时的Django allauth社交登录

  12. 12

    关闭浏览器时正在擦除数据。

  13. 13

    关闭浏览器时的通知

  14. 14

    当浏览器在MVC中关闭时,阻止会话过期

  15. 15

    Rails 4:当浏览器关闭时,会话值永远不会“过期”或消失

  16. 16

    PHP-关闭浏览器后会话销毁

  17. 17

    浏览器关闭时销毁会话-Ruby on Rails

  18. 18

    从远程会话粘贴时,谷歌浏览器崩溃

  19. 19

    关闭浏览器窗口后,如何防止Google Chrome浏览器删除会话Cookie?

  20. 20

    关闭浏览器或标签浏览器时,使用OWIN关闭会话

  21. 21

    继续会话,即使我关闭浏览器

  22. 22

    ASP.Net MVC C#在会话超时/浏览器关闭时发送通知

  23. 23

    Microsoft Edge(仅)在关闭浏览器时未结束会话?

  24. 24

    关闭浏览器时 ASP.NET 不清除 cookie 会话

  25. 25

    express-session 在浏览器关闭时更改会话

  26. 26

    浏览器关闭时会话到期

  27. 27

    Asp.net-在会话超时或浏览器关闭后运行全局方法

  28. 28

    Flask 会话 cookie 不会在浏览器关闭时持续存在

  29. 29

    Python关闭时如何退出网络浏览器会话?

热门标签

归档