代码之家  ›  专栏  ›  技术社区  ›  Malik Daud Ahmad Khokhar

ASP.NET会话到期重定向到登录页

  •  1
  • Malik Daud Ahmad Khokhar  · 技术社区  · 17 年前

    当会话过期时,重定向到登录页面的最佳方法是什么?我在用

    sessionState mode="InProc"
    

    我可以在web.config文件中设置它吗?

    5 回复  |  直到 14 年前
        1
  •  4
  •   Dillie-O    17 年前

    记住会话过期的诀窍是,这种情况发生在后台运行的工作进程中,如果不返回服务器检查状态,就无法直接通知用户。

    我要做的是让页面注册一个javascript块,该块将在指定的超时后再次将用户重定向到登录页面:

    Page.ClientScript.RegisterStartupScript(Me.GetType, "TimeoutScript", 
    "setTimeout(""top.location.href = '~/Login.aspx'""," &
     ConfigurationManager.AppSettings("SessionTimeoutMilliseconds") & ");", True)
    

    您会注意到我的web.config文件中存储了实际的毫秒数,这样我就可以根据需要调整超时时间。

    使用它,结合global.asax文件中的典型会话结束事件,可以非常清楚地处理Web应用程序中的会话超时。

        2
  •  2
  •   Brendan Kowitz    17 年前

    有点延迟回复,但是,如果使用标准的ASP.NET成员资格提供程序,也可以使用下面的配置。

    其基本思想是让认证cookie+会话同时过期。ASP.NET的自动行为将使您返回到定义的登录页面。身份验证cookie上的“slidingExpiration”属性必须为“true”,以便在会话处于活动状态时继续延长其寿命。

    <system.web>
      <sessionState mode="InProc" cookieless="false" timeout="20" />
      <authentication mode="Forms">
        <forms name=".SAMPLESITEAUTH" loginUrl="~/Login.aspx" protection="All" timeout="20" slidingExpiration="true" path="/" cookieless="UseCookies"></forms>
      </authentication>
    </system.web>
    
        3
  •  1
  •   JoshBerke    16 年前

    一个选项不是将客户端计时器设置为盲目重定向,而是让计时器命中一个小型Web服务,该服务可以指示是否应重定向用户。它的作用是为您提供更多的灵活性,您可以在许多情况下重定向用户,包括:

    • 会话过期
    • 从另一台计算机登录的同一用户帐户
    • 站点将进入维护模式,您希望将用户踢出。

    我用这种方法处理多个用户帐户非常成功。至于处理会话,您可能希望监听会话超时,甚至将其存储在会话超时的哈希表中。

    当该用户调用Web服务时,您从散列中删除它们,并告诉客户机代码重定向它们。

    这种类型的系统的另一个好处是,您可以跟踪浏览器何时访问服务器,以便更好地了解谁仍然在线。

    编辑

    回应以下评论:

    我认为调用公共方法不会更干净。一旦您这样做了,您就假定所有页面共享一个母版页或公共基类。我不想做那种假设。另外,如果您打算使用pagemethods方法,这将不起作用,因为pagemethods必须是静态的。

    我不完全确定您的意图是什么,但是如果您要对每个请求调用这个方法,那么我将使用HTTP模块并钩住管道来实现这一点;但是,这只在发出请求时才有效。通过使用带有客户端计时器的Web服务,您可以重定向用户,即使他们没有发出任何请求。

        4
  •  0
  •   Jared    17 年前

    你能在global.asax文件中加入会话结束事件吗?

        5
  •  0
  •   abatishchev Karl Johan    14 年前

    下面的答案是有史以来最好的例子……

    最好这样试试:

    Page.ClientScript.RegisterStartupScript(Me.GetType, "TimeoutScript", "setTimeout(""top.location.href = '~/Login.aspx'""," & ConfigurationManager.AppSettings("SessionTimeoutMilliseconds") & ");", True)
    

    您会注意到我的web.config文件中存储了实际的毫秒数,这样我就可以根据需要调整超时时间。

    使用它,结合global.asax文件中的典型会话结束事件,可以非常清楚地处理Web应用程序中的会话超时。

    当做, 纳加拉朱 戴尔PerotSystems||

    推荐文章