2013-05-13 87 views
0

所以,我有一些current_user方法,它从cookie的auth_token中获取ID,并且我希望cookie在与站点的窗口关闭时被删除。如何在窗口关闭时删除cookie?

cookies[:auth_token] = @user.auth_token 

我必须补充什么?

+0

查找[当浏览器窗口关闭或用户导航时触发的事件](http://stackoverflow.com/questions/1025935/capture-event-onclose-browser)和[更新cookie的到期日期](http://stackoverflow.com/questions/2144386/javascript-delete-cookie)在该事件处理程序。 – Tony 2013-05-13 20:47:59

+0

所以这是通过JS完成的?没有内置的Rails功能?比'cookies'和'cookies.permanent'之间有什么区别? – 2013-05-13 20:51:54

+1

开始时没有注意到ruby-on-rails标签。我不太熟悉Rails(更多是Django的人)。由于Cookie保存在用户的浏览器中,你当然可以在JS的客户端处理它们。从Rails开始可能会更方便,但是您必须从JS中的'beforeunload''处理程序发出一个AJAX请求,才能从Rails获得新的响应以及更新后的Cookie。 – Tony 2013-05-13 21:15:36

回答

0

实际上,如果您设置的cookie未提供过期日期,那么 只会保留,直到浏览器关闭。 (这可能意味着 程序本身,而不仅仅是一个窗口或选项卡。)

过期过期将立即删除cookie。

从主题:http://www.ruby-forum.com/topic/94682

@Joe半脸,如果它可以帮助你,请注明它是有用的。

+0

它的工作原理,但我不知道如何设置cookie从头开始过期好?附:我不想在用户注销时关注用户活动 – 2013-05-13 21:51:43

+0

不,它立即删除cookie,我发现...... Guy给出了错误的答案。即使点击重新加载也会跳出登录页面 – 2013-05-13 21:53:51

0

我曾经实施过类似的事情。出于安全考虑,我们必须在用户离开页面时自动登录用户。解决方案如下所示:

  • 在客户端,请编写beforeunload事件处理程序。
  • 从该处理程序发出AJAX请求以注销URL,在您的情况下,它可能是删除Cookie的特殊视图(请参阅Rails docs on cookies)。
  • AJAX请求必须是同步的,以确保beforeunload事件处理程序等待其完成。