【问题标题】:Save data to session state and keep synchronized with Froms Auth Session将数据保存到会话状态并与 Froms Auth Session 保持同步
【发布时间】:2011-12-30 00:25:39
【问题描述】:

我想将一些数据保存到会话状态。当用户首次通过表单身份验证登录时,我需要保存这些数据。我需要此会话状态变量与表单身份验证票证到期具有相同的生命周期。有什么方法可以确保这两者保持同步?

【问题讨论】:

  • 只有在双方都一直检查它们的情况下才能做到这一点。例如,每次需要读取会话数据时检查是否 (SessionData exists && UserIsLogedOn)。
  • 谢谢。我要保护的数据是用户密码(现有的 Web 服务,所以我别无选择),我认为会话状态会比表单身份验证票更安全。你想不出一个更好的地方来存储它,所以我没有这些同步问题,你可以吗?
  • 会话状态并不安全!会话状态的cookie可以被窃取并获取会话。
  • 但他们无法获取实际数据。它唯一的服务器端。
  • 如果他们窃取了 cookie,然后他们将其放在网页上,然后阅读您在网页上发送的内容。

标签: asp.net asp.net-mvc forms-authentication session-state


【解决方案1】:

有什么方法可以确保这两者保持同步吗?

两者在 web.config 中都有一个超时值,您可以将其设置为相同的值。现在这就是你的问题可能开始的地方。表单身份验证 cookie 可能具有滑动到期设置,而会话则没有。因此,如果您希望两个超时值匹配,请确保为身份验证 cookie 禁用此滑动到期。而这仅仅是开始。对于会话,您可以选择存储它的位置:Off、InProc、StateServer、SqlServer。

当您使用 Off(我个人使用的)时,ASP.NET 会话被禁用,并且您基本上没有任何会话。

当您将其设置为 InProc(这是默认值)时,会话将存储在内存中。除了 IIS 可以决定在不同情况下回收 AppDomain:一段时间不活动,达到一定的 CPU/内存阈值,......这基本上意味着如果会话存储在内存中并且 Web 服务器卸载了 AppDomain释放此会话中存储的所有内容,而身份验证 cookie 显然仍然有效。

StateServer 和 SQLServer 是进程外会话存储的 2 种不同模式,其中信息不再存储在 Web 服务器的内存中,并且可以在 AppDomain 被回收后继续存在。

所以基本上总结起来,以可靠的方式同步 ASP.NET 会话生命周期和 ASP.NET 表单身份验证 cookie 生命周期是非常困难的。我完全不使用 ASP.NET 会话来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多