2011-04-07 98 views
0

我在我的站点内进行ajax和json调用,在服务器端会话超时时间为120分钟。时间到期后,用户尝试从已加载的页面进行ajax或json调用,即可完成调用,我只是坐在那里没有响应。我正在使用一个sturts.xml文件来处理我所有的动作/ url调用,并且这个文件有一个拦截器,可以在每次调用服务器时运行。拦截器会检查您是否登录,如果不是,则会将您发送到登录屏幕。问题是,ajax和json的调用将全部设置如下:当服务器会话超时时出现JSON/AJAX问题

*我不得不用“(”和“)”替换所有的“<”和“>”标签,因为编辑器不会显示它们,所以只用更换括号 “>” 和 “<”

(动作名称= “someAction” 类= “ActionClass” 方法= “的someMethod”) (结果名称= “成功” 类型= “JSON”) (PARAM NAME = “目标”)的结果(/ PARAM) (PARAM NAME = “模式”) - *。类(/ PARAM) (/结果) (/动作)

THER e是一个全球性的结果如下规定将被调用时,拦截器要送你到登录页面:

(结果名称=“登陆” TYPE =“砖”)为site.login(/结果)

由于拦截器发回“login”而不是“success”的结果,ajax和json调用永远不会收到它期望的结果,当我查看响应时,浏览器收到它是页面的原始html我期待被重定向到。如果您的会话超时,任何其他类型的服务器调用都可以工作并将您发送到登录屏幕。如果我试图做一个普通的林行动电话,它会工作,但我不能做任何Ajax或JSON调用,并得到它的工作。有什么建议么?

回答

0

这可能是一个有点hackish,但这里是我在PHP做(不知道你正在使用什么语言):

if ($is_ajax_request && $not_logged_in) 
{ 
    exit('<script>top.location="/your_login_uri";</script>'); 
} 

Ajax调用返回脚本标签,这将重定向当前页面到您的登录页面。再次不确定你是否使用它,但你可以detect ajax requests with php。这可能不是最好的方式,但我已经使用了一年左右,每次都能很好地工作。希望这至少会给你一些想法。

读者,请评论,如果你认为这个解决方案是一个坏主意,并告诉我为什么,我想知道,因为我在我所有的项目中使用它。

+0

对不起,我忘了提及,但我在后端使用Java,前端使用JSP和Javascript。 – usherjer 2011-04-07 23:32:53