我理解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过期?
答案 0 :(得分:0)
使用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了解详情。
答案 1 :(得分:0)
解决方案是简单地关闭cookie或重置cookie,这会导致每次访问都会创建一个新会话。解决方案看起来像这样:
参考此https://codedecoder.wordpress.com/2013/12/04/clear-session-or-cookie-browser-close-ruby-jquery/它可能也有帮助