【问题标题】:Rails session doesn't expire at browser close [duplicate]Rails 会话在浏览器关闭时不会过期 [重复]
【发布时间】:2018-06-19 04:35:08
【问题描述】:

据我了解,Rails 的默认行为是在存储会话时,例如session[:id] = 1,是它会将 id 保存到 cookie 中,当用户关闭浏览器窗口时该 cookie 将过期。但是,在我的应用程序中,当我关闭(退出)浏览器并重新启动它时,浏览器仍然“记住”我已登录。这是我的控制器代码:

class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by(email: params[:email])
    if user && user.authenticate(params[:password])
      log_in user
      redirect_to user
    else
      flash.now[:notice] = "Invald email / password combination"
      render 'new'
    end
  end

  def destroy
  end
end

还有我的帮助文件:

module SessionsHelper

  def log_in(user)
    session[:user_id] = user.id
  end

  def current_user
    @current_user ||= User.find_by(id: session[:user_id])
  end

  def logged_in?
    !current_user.nil?
  end

  def user_name
    @current_user.first_name ? (@current_user.first_name + " ") : nil
  end

end

我在应用程序控制器中什么都没有,也没有弄乱有关会话的初始化程序或配置文件。什么可能导致我的会话持续存在而不会使 cookie 过期?

【问题讨论】:

    标签: ruby-on-rails session cookies


    【解决方案1】:

    解决方案是简单地关闭 cookie 或重置 cookie,这会导致每次访问都会创建一个新会话。解决方案如下所示:

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

    参考这个https://codedecoder.wordpress.com/2013/12/04/clear-session-or-cookie-browser-close-ruby-jquery/ 它也可能有帮助

    【讨论】:

    • 我知道如何使会话过期。我的问题是关于为什么会话在它应该到期的时候没有到期。 Ryan Lue 在另一篇文章中回答了我的问题:stackoverflow.com/questions/32621473/…
    【解决方案2】:

    添加config/initializers/session_store.rb文件

    Rails.application.config.session_store :cookie_store, key: '_app_session', expire_after: nil
    

    代替

    Rails.application.config.session_store :cookie_store, key: '_app_session'
    

    请查看here 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 1970-01-01
      • 2015-08-12
      • 2013-11-17
      • 2013-12-25
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多