4

我正在开发一个 MVC 3 应用程序,该应用程序将托管在具有多工作进程设置的网络场中。大约有十几个变量存储在 Session 中,但由于 IIS 设置而丢失。

迷路是指当登录过程成功时,我通过日志记录看到我已经设置了会话变量,但是在重定向操作和登陆控制器操作之后,会话变量通常为空。我不确定这是否相关,但这是在 HTTPS 中。

我们正在研究将存储在 Session 中的用户特定设置转移到其他机制的可能性,但有一个变量我将无法做到这一点。鉴于上述部署环境,我有以下问题。

  1. cookie 是我唯一(最好的?)为用户特定设置存储会话变量的替代方法吗?
  2. 如果是这样,是否有一种安全的机制来编写 cookie,这样它们就不能被操纵并且仍然可以在多服务器环境中读取?
  3. 据我了解,System.Runtime.Caching在上述 IIS 配置中运行时,它会遇到同样的问题。真的吗?
4

1 回答 1

7

cookie 是我唯一(最好的?)为用户特定设置存储会话变量的替代方法吗?

不-它们是最糟糕的方法。想到三个原因:

  1. 它们可以被操纵。
  2. 他们带着从客户端到服务器的每一个请求——效率低下。
  3. 它们会给您的实施增加更多复杂性,因为您必须开始考虑以不同的方式保护它们。

如果是这样,是否有一种安全的机制来编写 cookie,这样它们就不能被操纵并且仍然可以在多服务器环境中读取?

见上面的答案。

据我了解,System.Runtime.Caching 在上述 IIS 配置中运行时会遇到同样的问题。真的吗?

真的。您应该使用任何超出 proc 的 State Providers。您可以使用 Sql Server 存储会话数据 - 前提是您的对象显然是可序列化的 - 或状态服务器模式 mode="stateserver"

阅读此处了解更多详情

于 2012-05-14T13:58:31.767 回答