我有一个包含“向导”工具的应用程序,其中用户编辑大量对象,一旦完成,他们就可以选择保存或取消编辑。给定对象的大小,将它们存储在客户端并且将它们四舍五入是不可行的。相反,我们使用会话状态来存储对象,并使用ajax方法来检索/编辑它们。
我的问题是,如果用户选择离开当前页面而不完成此工作流程,则对象集合将保留在会话中,直到会话到期或用户再次开始相同的工作流程。鉴于可能有许多并发用户并且对象集合可能变得相当大(即每个用户大于2MB),我担心这会导致不必要的内存消耗和潜在的性能下降。
当然还有其他可用的方法不使用会话(即写入临时表),但是,我想知道是否有一种方法可以智能地检测用户何时离开控制器以便我可以执行某种排序清理(删除不必要的会话变量)。
答案 0 :(得分:0)
检测用户何时离开页面很困难。虽然有一些选择,但最可靠的可能是民意调查,这并不完美。例如,如果用户的连接断开几秒钟,那么您可以清除他们的会话。
如果向导外的应用程序上的任何页面都有用户的活动,您也不能只清除向导会话对象。如果用户打开多个选项卡/窗口,此解决方案将失败。
如果可以在您的向导上放置一个计时器,那么我将设置一个处于状态的管理器来管理用户的向导对象集合。该经理将拥有每个对象的最后一个活动日期,并且您设置了一个滑动过期时,以消除在X分钟内没有活动的任何会话对象。
此解决方案允许您编辑向导计时器的长度,以平衡用户需求和服务器资源。如果您的会话消耗了太多内存,则减少滑动过期,反之亦然。