2012-05-14 53 views
4

我正在研究一个MVC 3应用程序,该应用程序将托管在具有多工作进程设置的Web场中。有大约十几个变量存储在Session中,但由于IIS设置而丢失。ASP.NET MVC中每个用户变量的会话替代方案

迷路我的意思是,当登录过程成功时,我通过日志记录了解到,我设置了会话变量,但是在重定向操作之后以及着陆控制器操作中,会话变量通常是空的。我不确定这是否与HTTPS相关。

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

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

你能不能让设置到数据库?或者你需要他们在运行时缓存? – abatishchev

+0

我打算继续走这条路线,但是当使用CSLA作为我的基础数据提供者时,我需要提供一个配置设置来获取这种数据,类型的购物车场景。这是我试图在每个用户的基础上寻找存储替代方案的价值。感谢您的回复。 – likestoski

回答

7

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

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

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

如果这样是有写入cookie,使他们不能 被操纵并且仍然可以在多服务器环境中读取的安全机制?

查看上面的答案。

据我所知,当在上面的IIS配置中运行时,System.Runtime.Caching遭受同样的 问题。真的吗?

是的。你应该使用任何超出proc的状态提供者。您可以使用SQL Server存储会话数据-provided你的对象是可序列,obviously-或State server modemode="stateserver"

Read here更多细节

+0

感谢您的回复。你能解释为什么饼干是最糟糕的方法之一?这是因为他们可以被操纵,还是有其他一些担忧?无法使用Machine.config中的密钥对它们进行加密保护? – likestoski

+0

@likestoski我在我的答案中添加了一些解释。 – Icarus

相关问题