我在Session变量中存储“last login”。执行“return Redirect(url)”后,该Session变量将丢失。但是当我做另一个“重定向(url)”时,我会回来了!为什么?我不能让我的法语页面显示最后一次登录。
步骤:
答案 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或持久存储来存储您的数据而不是会话。