服务器会话超时时的JSON / AJAX问题

时间:2011-04-07 20:23:16

标签: html ajax json struts tiles

我在我的站点中进行ajax和json调用,在服务器端有超过120分钟的会话超时。在时间到期并且用户尝试从已加载的页面进行ajax或json调用之后,调用得到我只是坐在那里没有响应。我正在使用sturts.xml文件来处理我的所有动作/ url调用,并且该文件有一个拦截器,它与每次调用服务器一起运行。拦截器会检查您是否已登录,如果不是,则会将您发送到登录屏幕。问题是ajax和json调用都将设置如下:

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

(action name =“someAction”class =“ActionClass”method =“someMethod”)    (结果名称=“成功”类型=“json”)     (param name =“target”)结果(/ param)  (param name =“patterns”) - * .class(/ param)    (/结果) (/动作)

当拦截器想要将您发送到登录页面时,将会调用全局结果,如下所示:

(结果名称=“登录”类型=“图块”)site.login(/ result)

由于拦截器发回“login”而不是“success”的结果,ajax和json调用永远不会收到它期望的结果,当我查看响应时,浏览器收到它是页面的原始html我期待被重定向到。任何其他类型的服务器调用都可以工作,如果您的会话超时,则会将您发送到登录屏幕。如果我尝试将动作调用作为常规动作,它将起作用,但我无法进行任何ajax或json调用并使其工作。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这可能有点hackish,但这是我在php中所做的事情(不确定你正在使用的语言):

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

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

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