首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InProc会话数据丢失

InProc会话数据丢失
EN

Stack Overflow用户
提问于 2009-08-26 14:16:07
回答 2查看 710关注 0票数 2

我一周前才注意到这一点。我像这样存储用户当前正在玩的益智游戏(www.wikipediamaze.com)的相关数据:

HttpContext.Current.Session.Add("puzzleInfo",currentPuzzleInfo);

我知道使用"InProc“模式在会话中存储数据是非常不稳定的,并且每当web.config发生变化或任何其他因素(包括回收应用程序池)时都会被重置。

然而,我的数据一次只停留几秒钟(时间是可变的,但从字面上看根本不长),然后消失。我在一个共享的托管环境中,所以我不知道这是否会与此有关。

知道是怎么回事吗?我直接把它作为cookie存储在客户端会不会更好?请帮帮忙。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-26 14:54:42

Troubleshooting

每隔几秒钟就丢失一次数据是不寻常的,可能是你的共享主机提供商有问题--听起来像是服务器出于某种原因不断地丢弃会话。您可以显示sessionID (Session.SessionID)并查看它是否发生了变化。

可能存在进程崩溃,这是由服务器上的其他人引起的。这是一篇关于解决这类问题的msdn博客文章(向下滚动大约25% ):http://blogs.msdn.com/webtopics/archive/2009/07/22/in-proc-session-state-management.aspx

在共享主机环境中,这对您没有太大帮助,但您可以将其传递到支持链上。也许他们可以查看事件日志,确定是谁破坏了IIS,并将其解雇。

正如Sean McDonough所说:

...given如果您处于共享主机环境中,则很有可能存在不止一台web服务器托管您的站点。如果多个服务器正在为您的站点提供服务,并且正在使用的负载平衡机制不维护任何类型的会话亲和性,那么您可以简单地跳转到不同的web服务器并开始一个新的会话;毕竟,进程内会话不会跨框跟随您。

态保持的替代方案

无论如何,我总是发现即使在专用服务器上,InProc也是间歇性的不可靠,所以我避免使用它。

谨慎使用cookies -cookie会随着每个请求(图像、脚本等)一起传输,并且应该保持最低限度。你可能会想,“嗯,这个项目不需要伸缩”,但是一旦你做出了项目范围的设计决定,你将使用cookie来保持你的状态,你就是在为众所周知的擦伤而巡航。

我的意思是,您已经脱离了最佳实践,可能会遇到一些糟糕的情况,比如我需要将xml文档持久化一秒钟。在cookie中这不是一个好主意!

如果您无法设置会话状态服务器(顺便说一句,这非常容易),因为您处于共享主机环境中,您可以考虑使用SqlSessionStateStore,它允许您将会话数据存储在SQL Server中。

票数 3
EN

Stack Overflow用户

发布于 2009-08-26 15:43:38

布赖恩的建议非常好,我完全同意他的观点。我还想提供一个额外的可能性。

您对托管应用程序的环境了解得多吗?我要求的原因如下:假设你在一个共享托管环境中,有一个以上的web服务器托管你的网站的可能性是相当大的。如果多个服务器正在为您的站点提供服务,并且正在使用的负载平衡机制不维护任何类型的会话亲和性,那么您可以简单地跳转到不同的web服务器并开始一个新的会话;毕竟,进程内会话不会跨框跟随您。

思考的食粮:-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1335025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档