2009-10-24 122 views
1

我的应用30分钟后会话超时。如果用户激活了“永久登录”功能,则在随后的HTTP请求中,服务器读取“perm session”cookie并恢复会话。使用AJAX呼叫恢复会话

但是,如果用户在会话过期后没有重新加载或导航到另一个页面,而是单击通过AJAX检索数据的按钮,则不会恢复会话;在数据应该加载到的DIV中,改为出现登录窗口。

这导致我假设AJAX调用不会携带cookie信息。我是对的吗,还是我错过了别的?

更新:

后端:symfony1.2版本(PHP框架), 前端:原型

UPDATE2:它是在应用程序中的错误,不与cookies

+0

嗯有趣,我alwasy认为由浏览器执行的请求携带cookie信息? – 2009-10-24 12:22:44

+0

该假设可以通过检查实际的网络流量来验证/反驳。如果你在Windows上工作,那么Fidder(http://www.fiddler2.com/fiddler2/)是一个很棒的工具。否则Firebug的Net面板应该完成这项工作。 – kdgregory 2009-10-24 12:51:27

+0

真的,很好的提示;我在Firebug中检查了请求,并且cookie信息在那里。 – 2009-10-24 13:05:35

回答

2

听起来像你正在恢复会话,但不提供新的身份验证cookie。你可能想尝试一种我在博客上写过的关于有一个客户端定时器的技术,该定时器会在会话超时之前提示用户,当他们点击确定更新它时,会发出一个请求用于保持会话和身份验证Cookie的活跃。你可以在http://farm-fresh-code.blogspt.com找到更多的信息。该文章标题为Client-side Session Termination

+0

伟大的教程!我宁愿没有“嘿,你的会议即将到期”通知弹出;我更喜欢当会话恢复透明。 – 2009-10-24 12:42:21

+0

然后,继续提出请求,而不是弹出对话框。出于安全原因,如果用户没有坐在他们的计算机上,我倾向于会话过期,所以如果他们没有在合理的时间内做出响应,我会弹出并悄悄注销。 – tvanfosson 2009-10-24 12:48:23

2

一个XMLHttpRequest调用应该问题携带正常的cookie信息。你可能会遇到一个bug。您是否确保通话来自同一个域名?

也许你的cookies也过期了?更多的信息可能会帮助.. :)

+0

我怀疑有一个错误,是的。 – 2009-10-24 12:43:04

+0

你知道如何处理外部域名的来源吗? – 2014-03-21 14:23:18