如何在浏览器关闭时清除设计会话?

use*_*692 8 javascript ruby session ruby-on-rails devise

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

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

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

window.onbeforeunload = function() {
  $('#logout_cls').click();
};
Run Code Online (Sandbox Code Playgroud)

并尝试向AJAX会话控制器发送请求以销毁用于清除会话的操作.

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

但这一切都行不通.

use*_*692 6

事实证明问题是我的session_store配置方式.

MyApp::Application.config.session_store :active_record_store, 
{:key => '_my_app_session', :secret => '5xb5x1g92e965b95b16e49x79gxx9999', :expire_after => 2.hours}
Run Code Online (Sandbox Code Playgroud)

我删除了选项,问题解决了.

我有另一个问题,那就是删除选项是否有任何潜在的风险?我没有明显地在会话中存储任何重要数据,但是放入我不希望暴露的数据.

我的应用程序将在几天内上线,为此获得答案将非常有帮助.我用谷歌搜索了一个小时左右但没有太多运气.

谢谢

  • 如果您有其他问题,您应该将其作为单独的问题发布(可能带有此链接的链接). (4认同)

Ash*_*aka 2

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

Devise 的选项 Rememberable“管理生成和清除令牌,以从保存的 cookie 中记住用户”。如果您不希望这样做,请从用户模型中删除remember_token字符串和日期时间,并从登录页面中删除按钮。remember_created_atRemember Me