在我的应用程序(ASP.NET MVC 3 RAZOR)中,当会话到期并且用户尝试访问某些内容时,它会将它们重定向到登录页面以重新登录. 这很好,但是当从ajax请求调用时(例如,如果用户已经离开他们的屏
这很好,但是当从ajax请求调用时(例如,如果用户已经离开他们的屏幕一段时间没有活动),它将在ajax请求中加载登录表单…这不是我想要发生的.
处理这个问题的最佳方法是什么?理想情况下,如果会话已过期,我想显示模式,以便用户无法访问其他区域.因此,即使他们离开屏幕,一些jQuery也会检查会话,然后应用一个模式说’Session Expired’
我该怎么做?
例如
if(SESSION HAS EXPIRED) { showModal(); }我在这里可以看到两个单独的可寻址问题,因此我将分别讨论它们.
登录以AJAX结果返回:
而不是只返回登录屏幕,返回一条消息,指示会话已过期.如果你的AJAX收到这样的消息,它知道用户需要重新登录.此时,你可以做类似的事情
window.location = loginpageurlhere;
或者,您可以检查AJAX响应以查看它是否是预期响应或是否是登录页面.如果是登录页面,请使用上述建议.
如果用户长时间不活动,则显示对话框:
为此,您需要知道用户处于非活动状态的时间.您可以通过几种不同的方式完成此操作,其中一种方法如下:
>页面加载时,初始化变量以用作倒计时.
>设置一个定时器,每次耗尽时都会递减计数器,然后重新启动.
>如果计数器达到零,则显示对话框并让用户重新登录.
>每次发生有效活动(AJAX帖子或您可能拥有的任何其他活动)时,请重置计数器.
您可以使用这些方法中的任何一种,但如果您担心在无人值守的计算机上保护数据,则第二种方法最好,因为您可以阻止屏幕并仅显示对话框,并且会在用户离开时发生,而第一种方法在用户实际尝试在您的页面上执行操作之前无法执行任何操作.