gpt4 book ai didi

c# - 是否可以在 asp.net 中序列化/反序列化 Session 对象

转载 作者:行者123 更新时间:2023-11-30 23:34:05 25 4
gpt4 key购买 nike

我在 web.config 中有以下 session 配置

<sessionState mode="InProc" timeout="1440" cookieless="false">

但是由于某种原因 session 超时。所以我想做的就是如果 session 过期然后重新加载保存的 session ,如果 session 序列化是可能的。 是否可以保存 Session 对象然后重新加载它?

最佳答案

Johnny5 的评论可能一针见血——您的进程将在一段时间不活动后关闭,并且所有 InProc session 都将丢失。我不认为 Visual Studio 下的 IISExpress 提供了控制它的方法,因此请考虑在开发期间在成熟的 IIS 下运行并将应用程序池的“空闲超时”属性增加到 1440。

但是,如果您真的正在寻找一种保存 session 的方法,Global.asax 中的 Session_Start 和 Session_End 事件是执行此操作的一个地方。 HttpSessionState 不可序列化,因此您需要使用不同的序列化程序(如 Ernesto 建议的那样)或提取所有 session 条目并将它们放入不同类型的可序列化集合中。 (HttpApplication.Session 属性是只读的,因此在任何情况下采用后一种方法可能是最简单的方法,因为您不能只换出完整的 session 实例..)

但请注意:如果您使用的是 InProc,Session_End 就会出现问题——除了最琐碎的用途外,它对所有用途来说都太不稳定了。应用程序池由于多种原因(预定义的时间间隔、高内存使用率、不活动等)定期自行回收,并且您不会在重新启动之前获得很好的 Session_End 事件,因此您将失去 session 而不保留它们.

这就是为什么每个人都告诉您如果您最不关心您的 session 就使用进程外提供程序的原因。 ASP.NET 附带的 SQL Server 和 StateServer 模式是显而易见的选择,但如果您希望进行长期存储,那么您可能会遇到问题,因为它们不会触发 Session_End 事件。

我的雇主 (ScaleOut Software) 拥有少数可以触发 Session_End 的进程外 session 提供程序之一。它是一个商业产品,但如果您只有基本需求并且不需要 ScaleOut SessionServer 可以提供的所有可扩展性和容错能力,它可以在单个服务器上免费运行。

关于c# - 是否可以在 asp.net 中序列化/反序列化 Session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33609610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com