在我的localhost服务器Session["Culture"]
变量上始终存储正确的值。
但是在我的外部服务器上,相同的会话变量(Session["Culture"]
)有时会失去价值并变为空。为什么会这样?以及如何解决它?
global.asax.cs
文件的一部分:
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
if (HttpContext.Current.Session != null)
{
CultureInfo ci = (CultureInfo)this.Session["Culture"];
if(ci == null){
//breakpoint
}
}
}
编辑:
很明显,会话无法在服务器A和服务器B之间共享。
我的问题有所不同 - 简而言之 - 相同的应用程序,但是:
1)在服务器A(localhost)上Session["Culture"]
正常,始终存储一些信息。
2)在服务器B(外部)Session["Culture"]
工作不错,但总是在随机时间失去价值后成为null
答案 0 :(得分:3)
进程内会话状态可能随时被清除,因为当应用程序域被回收时会话结束。
您可以通过使用外部会话存储机制(例如状态服务或数据库提供程序)来缓解这种情况。您还可以构建自己的会话状态提供程序。
然而;如果你希望会话状态是健壮的,你仍然应该将会话状态视为仅比缓存更不易挥发;总是检查是否为空,如果是,则重置值。
如果会话在一台服务器上快速到期,我会调查为什么会这样。有些东西可能导致回收不当。
另外:我看到你正在使用多台服务器;进程内会话状态也无法处理。上述建议也有帮助。