【问题标题】:how to clear devise session on browser close?如何在浏览器关闭时清除设计会话?
【发布时间】:2014-02-16 01:15:00
【问题描述】:

我在我的 ruby​​ on rails 应用程序中使用“设计”进行密码验证。一旦我成功登录并关闭浏览器并打开一个新的浏览器窗口,我仍然登录。假设我正在使用 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')
          });
    });

但这一切都不起作用。

【问题讨论】:

    标签: javascript ruby-on-rails ruby session devise


    【解决方案1】:

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

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

    我删除了选项,问题就解决了。

    不过我还有一个问题,那就是删除选项是否有任何潜在风险?我显然没有在会话中存储任何重要数据,而是放入了我不想暴露的数据。

    我的应用程序将在几天后上线,对此获得答案将非常有帮助。我在 Google 上搜索了一个小时左右,但运气不佳。

    谢谢

    【讨论】:

    • 如果您还有其他问题,您可能应该将其作为单独的问题发布(可能带有指向此问题的链接)。
    【解决方案2】:

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

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

    【讨论】:

    • 我已经禁用了记忆策略。我的模型是这样的:devise :database_authenticable, :recoverable, :trackable, :validatable Thoughts?
    • 转到db\schema.rb。检查您的用户表。它是否有一个名为remember_created_atremember_token 的属性?如果有,那么您必须删除它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 2010-12-19
    相关资源
    最近更新 更多