ASP.NET MVC中每用户变量的Session替代方法

时间:2012-05-14 13:50:48

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

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

通过迷路我的意思是当登录过程成功时我通过日志记录看到我已经设置了Session变量但是在重定向操作之后并且在着陆Controller Action上,Session变量通常是空的。我不确定这是否相关,但这是在HTTPS中。

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

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

1 个答案:

答案 0 :(得分:7)

  

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

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

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

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

    见上面的答案。

      

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

    真。您应该使用任何超出proc的州提供商。您可以使用Sql Server存储会话数据 - 提供您的对象可序列化,显然 - 或State server mode mode="stateserver"

    Read here了解更多详情