【问题标题】:Set ASP.net Session Timeout Based on IP Address根据 IP 地址设置 ASP.net 会话超时
【发布时间】:2010-11-09 12:56:07
【问题描述】:

是否可以根据用户的 IP 地址以编程方式为用户会话设置会话超时?

示例:如果 IP 地址在 192.0.X 范围内,则将会话超时设置为 6 小时。否则,保留 web.config 中的默认设置(或设置为 30 分钟)。

大概这将在Global.asax:Session_Start 中完成。现在我可以只使用用户在会话中的第一个请求的 IP 地址(考虑到用户可以在会话中更改 IP 地址的事实)。

ASP.net 3.5、IIS 7

【问题讨论】:

    标签: asp.net session ip-address session-timeout


    【解决方案1】:

    要测试 IP 范围,您可以使用:Request.UserHostAddress.StartsWith("192.0.")
    然后使用Session.Timeout 属性设置超时。

    C# 示例:

    if(Request.UserHostAddress.StartsWith("192.0."))
    {
      Session.Timeout = 360; // 6 hours
    }
    

    按照您的建议在 Global: Session_Start 事件中执行此操作。

    【讨论】:

      【解决方案2】:

      Yo 可以将会话的 Session.Timeout 属性设置为代码中默认值以外的值。

      【讨论】:

        【解决方案3】:

        您可以在 web.config 中更改会话超时 在system.web会话状态中写这段代码 timeout=540/> //6小时

        【讨论】:

          【解决方案4】:

          我认为 Session.Timeout 属性设置了整个应用程序而不是用户会话的超时。我认为您不能在一个应用程序中出现多个超时。

          选项是有两个站点/应用程序,一个用于长时间超时用户,另一个用于其他用户。

          您还可以通过创建会话提供程序来使用自己的会话管理或使用完整的自定义方式来处理会话状态。

          另一种选择是将 JavaScript 添加到长时间超时用户的页面以保持会话活动。检查这个article

          【讨论】:

          • 错了。 Session.Timeout 在每个会话中设置。如果您在代码中设置Session.Timeout,它将仅针对当前会话设置。
          • 很高兴知道,文档通常讨论在 web.config 中设置它,并且它是应用程序范围的。但它是 Session 对象的一个​​属性这一事实应该告诉我,它是针对一个特定会话的。
          猜你喜欢
          • 2012-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多