【问题标题】:Alternative to Session for a per-user variable in ASP.NET MVCASP.NET MVC 中每个用户变量的 Session 替代方案
【发布时间】:2012-05-14 13:50:48
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您不能将设置保存到数据库中吗?或者您需要在运行时缓存它们?
  • 我正计划走这条路,但是当使用 CSLA 作为我的底层数据提供者时,我需要提供一个配置设置来获取该数据,这是一种马车场景。这是我试图为每个用户寻找替代存储的价值。感谢您的回复。

标签: asp.net .net asp.net-mvc iis-7


【解决方案1】:

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

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

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

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

见上面的答案。

据我了解,System.Runtime.Caching 也有同样的问题 在上述 IIS 配置中运行时出现问题。这是真的吗?

没错。您应该使用任何超出 proc 的 State Providers。您可以使用 Sql Server 存储会话数据 - 前提是您的对象显然是可序列化的 - 或 State server mode mode="stateserver"

Read here了解更多详情

【讨论】:

  • 感谢您的回复。你能解释一下为什么 cookie 是最糟糕的方法之一吗?这是因为它们可以被操纵还是有其他问题?不能使用 Machine.config 中的密钥进行加密保护吗?
  • @likestoski 我在回答中添加了一些解释。
猜你喜欢
  • 2018-09-10
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
相关资源
最近更新 更多