【问题标题】:Create Action which doesn't affect session timeout创建不影响会话超时的操作
【发布时间】:2013-04-02 15:54:51
【问题描述】:

在我的 ASP.NET MVC 3 应用程序中,我有一个计时器,它在每个时间段执行一个控制器操作。这样我的会话就永远不会超时...

我不希望此操作在每次执行时都重置会话计时器。我试图通过创建一个自定义属性[AllowAnonymous] 来做到这一点,就像这个链接

http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx

但是这样,任何用户都可以在不登录的情况下访问此操作,这不是我想要的。

有什么想法吗?

【问题讨论】:

    标签: asp.net-mvc-3 session session-timeout


    【解决方案1】:

    您可以在 web.config 中禁用会话的滑动到期:

    <forms slidingExpiration="false" loginUrl="~/Account/LogOn" timeout="2800" />
    

    这样,表单身份验证 cookie 将不会被更新,并且票证将仅在固定的时间内有效。

    如果您只想对某些请求禁用滑动到期,您可以查看following answer。这有点骇人听闻,因为票证续订代码深埋在 FormsAuthenticationModule 中。

    【讨论】:

    • 好的,但这会影响所有操作,我只想为特定操作执行此操作
    • 这非常困难,因为票证续订深埋在 FormsAuthenticationModule 代码中。你可以看看下面的帖子:stackoverflow.com/a/4722128/29407
    • @DarinDimitrov 所以它可以通过将slidingExpiration 设置为 false 并手动更新所有请求的 cookie(使用您提供的链接),但针对特定操作的请求除外?
    【解决方案2】:

    如何创建一个通过子域访问的不同应用程序?我认为这不仅是最简单而且最干净的方法。

    如果您使用任何其他方式并且其他开发人员稍后需要支持它,那么根据解决方案的复杂性,如果他们需要以某种方式对其进行更改,这样做的成本可能会更高。

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 2012-01-02
      • 2011-10-04
      • 2014-03-27
      • 2022-08-14
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      相关资源
      最近更新 更多