【问题标题】:Asp.net MVC Session timeout condition based handlingAsp.net MVC 基于会话超时条件的处理
【发布时间】:2018-04-19 20:48:57
【问题描述】:

我的 MVC Web 应用程序使用 asp.net 会话管理。会话有默认超时 20 分钟。在会话超时时,用户被重定向到主页。我的应用程序使用 SessionTimeout ActionFilterAttribute 来处理会话超时。 SessionState 存储在服务器中。

问题: 即使发生会话超时,当用户返回特定操作方法时,我也需要为该用户续订会话并允许继续,而不是重定向到主页。

我尝试使用 SessionTimeout ActionFilterAttribute 中的 OnActionExecuting 方法来识别会话超时,如果请求中的操作是该特定操作方法,则允许用户继续执行该操作。

但它似乎不起作用。它只是将用户重定向到主页。 我不确定如何继续。

【问题讨论】:

  • 我已经有几年没有处理任何与会话相关的事情了,但是会话一旦超时就不会消失了吗?这意味着你不能“更新”它。我认为你有两个选择。您可以在配置中延长超时时间,也可以创建某种保活脚本,以比超时时间更短的间隔调用服务器。
  • 无论您所说的会话到期是正确的,我想做的是创建一个新会话并将新会话与用户关联并导航到请求的操作方法而不是重定向到主页页面,会话超时。这可能吗?
  • 我不相信不重新认证是可能的。

标签: c# asp.net .net asp.net-mvc session


【解决方案1】:

会话有超时和刷新不可用等坏问题,使用表单身份验证进行身份验证你可以选择这个custom authentication sample

或者其他使用cookies

        HttpCookie MyCookie = new HttpCookie("MyCookie");
        // for remveing if already Exists adding new;
        Request.Cookies.Remove("MyCookie");
        if (Request.Cookies["MyCookie"] == null)
        {

            MyCookie["id"] = id.ToString();
            Response.Cookies.Add(MyCookie);
        }
        else
        {
            MyCookie["id"] = id.ToString();
            // Request.Cookies.Remove("MyCookie");
            Response.Cookies.Set(MyCookie);
        }

        // retries 
        int id = Convert.ToInt32(Request.Cookies["MyCookie"]["id"]);

【讨论】:

  • 感谢您的回复,但表单身份验证在我的系统中不是一个选项。
  • ok 如果 FormsAuthentication 不能解决您的问题,您可以使用 cookie。
  • 你能告诉我cookies如何解决我的问题吗?我不知道该怎么做。
  • 嗨悟空..我用cookie更新了答案,我想你可以用它来为你的目的有用..
  • 感谢您的回复 Saneesh,但我使用 ActionFilter 解决了问题,方法是创建一个新会话并将其添加到我的业务对象的上下文中。
【解决方案2】:

感谢您的回复。

  1. “会话无法续订”一旦过期。
  2. 不要更新会话,而是在 ActionFilters 属性 (SessionTimeout) 中创建一个新会话。

我的问题的解决方案是创建一个新会话并将其与域对象/用户重新链接,以便用户可以继续他的旅程。我已经在我的 SessionTimeout ActionFilterAttribute 中完成了这项工作,以便仅为具有特定控制器/操作的特定请求创建新会话。

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 2017-10-06
    • 2011-08-12
    • 1970-01-01
    • 2015-12-19
    • 2012-11-10
    • 2011-09-25
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多