【问题标题】:Azure Asp.Net Redirect destroys Session variablesAzure Asp.Net 重定向会破坏会话变量
【发布时间】:2014-03-21 14:11:38
【问题描述】:

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

步骤:

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

【问题讨论】:

  • 英文版和法文版是同一个应用程序的一部分吗?

标签: asp.net azure


【解决方案1】:

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

鉴于上面的示例,我的 cmets 添加了:

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 或持久性存储来存储您的数据,而不是会话。

【讨论】:

  • 谢谢!我忘记了 Azure 有负载平衡 inProc 的。我会尝试 cookie 的方法,否则默认为共享会话缓存。
猜你喜欢
  • 2012-12-15
  • 2012-07-24
  • 2014-03-18
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2012-10-31
  • 2019-04-17
  • 2010-10-31
相关资源
最近更新 更多