Azure Asp.Net Redirect会破坏会话变量

时间:2014-03-21 14:11:39

标签: asp.net azure

我在Session变量中存储“last login”。执行“return Redirect(url)”后,该Session变量将丢失。但是当我做另一个“重定向(url)”时,我会回来了!为什么?我不能让我的法语页面显示最后一次登录。

步骤:

  1. 英文页面 - >显示会话变量
  2. 切换到法语:重定向()
  3. 法语页面 - >缺少会话变量
  4. 切换到英语:重定向()
  5. 英文页面 - >显示会话变量!!!

1 个答案:

答案 0 :(得分:2)

默认情况下,会话在服务器上存储在内存中。如果我不得不冒险猜测,您部署了多个Azure应用程序实例,但只有其中一个实例具有会话状态。由于Azure的负载均衡是循环的,如果您有两个实例,您将在大致所有其他请求中看到您的状态。

所以考虑到上面的例子,我的评论补充道:

English page -> shows session variable   # Hits IN_0, has session state
Switch to French: Redirect()             # Browser makes new request
French page -> missing session variable  # Hits IN_1, does not have session state
Switch to English: Redirect()            # Browser makes new request
English page -> shows session variable   # Hits IN_0, has session state

如果您在Azure上托管您的网站并打算使用多个实例,则需要设计可能会被任何这些实例接收到您的用户请求。

对于解决方案,Azure提供了一个会话状态提供程序,它将会话写入共享缓存而不是将其存储在内存中。请查看http://msdn.microsoft.com/en-us/library/windowsazure/gg185668.aspx,了解有关如何进行设置的详细信息。

如果这不能满足您的需求,您可能需要考虑使用Cookie或持久存储来存储您的数据而不是会话。