2012-03-30 72 views
8

我在我的ruby on rails应用程序中使用'devise'进行密码验证。一旦我成功登录并关闭浏览器并打开一个新的浏览器窗口,我仍然登录。假设我正在使用Chrome,我关闭了Chrome的所有实例,然后打开一个新窗口。我仍然登录。当我在做IE和Firefox时也是如此。如何清除浏览器关闭的设计会话?

我会在窗口关闭并且打开一个新的窗口应该建立服务器和浏览器之间的新会话是不是?如果不是我如何实现这一目标?

我曾尝试单击浏览器窗口的onbeforeunload事件上的注销按钮,但它不起作用,因为它在任何表单提交或链接单击时注销应用程序。

window.onbeforeunload = function() { 
    $('#logout_cls').click(); 
}; 

并试图发送AJAX请求会话控制器销毁清除会话的操作。

jQuery(window).bind(
    "close", 
    function(event) { 
      $.ajax({ 
      type: 'DELETE', 
      dataType: 'json', 
      url: $('#logout_cls').attr('href') 
      }); 
    }); 

但这一切都没有奏效。

回答

2

这实际上是一个功能。 Facebook和几乎所有使用身份验证的网站都是通过使用cookie来完成的。

设计的选项可记住“管理生成和清除用于从保存的cookie中记住用户的令牌”。如果您不想要,请从用户模型中删除remember_token字符串和remember_created_at datetime,并从登录页面中删除Remember Me按钮。

+0

我已经禁用了可记住的策略。这里是我的模型是如何:设计:database_authenticatable,:可恢复,:可跟踪,:validatable 想法? – user380692 2012-03-30 11:49:03

+0

转到'db \ schema.rb'。检查你的用户表。它是否有一个名为'remember_created_at'或'remember_token'的属性?如果有,那么你必须删除它们。 – Ashitaka 2012-03-30 15:19:33

+0

你是否设法解决这个问题? – Ashitaka 2012-04-10 02:55:24

6

原来问题在于我的session_store是如何配置的。

MyApp::Application.config.session_store :active_record_store, 
{:key => '_my_app_session', :secret => '5xb5x1g92e965b95b16e49x79gxx9999', :expire_after => 2.hours} 

我删除的选项,这个问题得到了解决。

我还有一个问题,那就是删除选项是否有任何潜在风险?我没有在会话中存储任何重要数据,但输入了我不想公开的数据。

我的应用程序将在几天内上线,这对获得答案是非常有帮助的。我搜索了一个小时左右的东西,但没有太多的运气。

谢谢

+4

如果你还有其他问题,你应该把它作为一个单独的问题发布(可能带有这个链接)。 – 2014-02-18 22:55:50

相关问题