问题描述
我有一个ASP.NET应用程序,其中用户拥有不同的权限,并通过Facebook登录。该应用程序包括(除其他外)填写一些表格。有些用户可以访问其他用户没有的表单。表格有时可能需要在书籍和/或互联网上进行一些搜索才能提交。
因此,我们遇到会话暂停问题(似乎),在其他地方进行研究后,用户会遇到“未授权查看此页面/表单”。
尝试解决方案
我创建了一个日志功能,可以记录应用程序中战略要点上的少数变量的状态。我已经找到了问题,当问题发生时,Session变量“UserRole”为空。
Relogging
显而易见的解决方案是:“你试过重新上架吗?” - 应该重置会话并允许用户返回他们想要的表单。注销时,我使用
Session.Clear();
Session.RemoveAll();
我在登录时创建了一个包含相关变量(包括UserRole)的新会话。但这并没有帮助。
保持会话活动
一种方法是将标准的20分钟会话长度增加到任意更高的数字(比如2小时)。虽然这在测试期间是可行的(目前只有大约5个用户),但从长远来看,它不是一个可行的解决方案,因为服务器必须将会话对象从许多用户保持更长时间,以指数级增加服务器需求。
相反,我创建了一个'虚拟'.ashx处理程序“RefreshSession.ashx”,它可以接收POST请求并返回“200”状态代码。然后我在应用程序的共享部分(所有页面都使用)中创建了一个jQuery函数,每隔10分钟调用一次这个处理程序,只要选项卡在浏览器中打开就可以刷新会话。我检查了网络流量,它按预期工作,即使窗口最小化或用户正在查看另一个选项卡,也会调用处理程序。这也没有解决问题。
警告
当其中一个用户遇到问题时,他们会打电话给我或我的编程伙伴。当然,我们去看看是否会遇到同样的问题。我们都有相同的(管理员)权利。 “有趣”的是,我们在同一个子页面上看到完全相同的错误 - 即使我们几天没有与应用程序有任何联系。
问题将“修复自身”(即让具有适当角色的用户回到子页面上)一段时间后,但是甚至不将应用程序重新发布到服务器将手动重置它。
因此,似乎不是一个简单的会话错误,因为假定“UserRole”会话变量在15-20分钟不活动后为空。它似乎在服务器状态内部保存在某处。
我的问题是,我现在不知道在哪里看以及如何进步。我希望这里的某个人可能有解决方案的想法,或者至少能够指出我正确的方向? : - )
谢谢大家的时间,非常感谢。
答案 0 :(得分:0)
根据MaCron对该问题的评论,我们决定将信息保存在用户的cookie中而不是会话变量中。一切似乎都指向我们正是这个问题,截止日期是最后期限,而且我无法弄清楚如何禁用工作进程的同步,这似乎是一个可行且相对容易的修复。