【问题标题】:How can I use sessions with the client ip changing every 5 minutes?如何使用每 5 分钟更改一次客户端 IP 的会话?
【发布时间】:2011-12-11 15:40:38
【问题描述】:

我正在开发一个当前使用 Session 来保存用户 ID 和权限的 Web 应用程序。这给我带来了问题,因为客户端 IP 地址通常每 5 分钟更改一次,有时会更快,因此会话丢失。

我目前的解决方法是加密一个字符串,当会话终止时将自动登录,但它仍然会导致问题,因为如果必须运行自动登录过程,则不会提交表单。

我可以发布一些代码,但我觉得我目前的攻击方法离基地很远。我能得到一些建议吗?

谢谢!

该网络应用程序可供大约 10 个用户使用,如果可能的话,我希望它永远不会超时,这样如果他们正在查看一个页面 4 天并返回它,他们可以按下提交并提交。

【问题讨论】:

  • 客户端 IP 地址更改不应影响会话,如果您使用内置支持 - 会话标识符保存在 cookie 或 url 中,两者都没有绑定到客户端IP地址。那么你在做什么以这种方式捆绑它?
  • 在简单的形式中只是这个 'Session("User") = "Data" 并且当 IP 改变时似乎会丢失
  • 如果您使用 InProc 会话状态并且 应用程序池 回收,您将丢失会话,但这是服务器端问题(如果发生这种情况,则令人担忧每 5 分钟一次)。默认会话超时为 20 分钟。
  • 老实说,这个 web 应用程序上没有存储敏感数据,我几乎正在考虑将 USERID 存储在 cookie 中并从中调用,根本不使用会话。

标签: asp.net session cookies ip-address


【解决方案1】:

我不确定您为什么在 5 分钟后失去会话,或者为什么它似乎与客户端 IP 地址更改相关(这是一个 Intranet 应用程序吗?每隔 5 分钟会发生其他事情吗?)。

以下web.config setting 应创建持续 6 个月的会话,并且将在应用程序池回收后继续存在:

<sessionState mode="StateServer" timeout="262800"
    stateConnectionString="tcpip=127.0.0.1:42424"/>

当然,您必须在您的机器上运行状态服务器,并且存储在会话中的所有内容都需要可序列化。


正如 Jarrett 指出的那样,想要在没有任何活动的情况下保持会话如此长时间是相当奇怪的,如果用户数量很多,我不建议这样做,但如果它真的是 10 并且只有 10 个用户,应该没问题。

【讨论】:

  • 更改 web.config 时我得到的只是“无法序列化会话状态。”
  • 是的,所以您实际上在会话中存储了比您作为示例提供的字符串更复杂的数据,并且由于某种原因,您的应用程序池正在回收非常经常 - 这是根本问题。默认情况下,应用程序池应仅每 29 小时回收一次。
【解决方案2】:

如果您需要页面在四天内保持有效,请不要使用 Session,也不要使用 Viewstate。您可以将数据存储在 cookie、页面上的隐藏输入字段和 URL 查询字符串中。在这段时间里,没有其他东西是可靠的。如果您要存储敏感或与安全相关的信息,请负责任地进行,这可能是它自己的问题。

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 2017-10-04
    • 2020-06-23
    • 2011-12-03
    • 2015-07-31
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多