小编xmj*_*mjw的帖子

在 Rails 4.0.0 中调用 `reset_session` 在第二个后续页面上不起作用

我一直在 Rails 4.0.0 中构建一些东西,但我得到了奇怪的会话行为。我有一个将值写入会话的登录过程。它的缺失是我确定用户未登录的方式:

def login
  session[:user_id] = user.id

  #Then we render a simple page...
end
Run Code Online (Sandbox Code Playgroud)

为了验证我是否有一个有效的用户,我在我的application_controller.rb

def current_user
  logger.info  "(current_user) Session ID: #{request.session[:user_id]}"
  if session[:user_id] != nil && session[:user_id] != -1 
    User.find(session[:user_id])
  end
end
helper_method :current_user
Run Code Online (Sandbox Code Playgroud)

这是从几个不同的地方调用以检查用户状态并决定如何呈现页面。(!= -1下面解释。)在注销时,我重置了会话:

def logout
  reset_session
end
Run Code Online (Sandbox Code Playgroud)

呈现的视图包括对current_user辅助方法的调用以呈现导航。此页面呈现时我的导航部分显示为没有当前用户,并且调试日志显示会话变量已清除。但是,无论我做什么,在下一页上它都会恢复到登录状态,并且我突然再次对用户进行了身份验证,以便current_user从会话中获得正确的值。

我尝试为会话分配不同的值(例如 -1),这具有相同的影响。由于某种原因,我的会话在删除后恢复。此外,当我使用以下内容时:

def logout
  reset_session
  redirect_to root_path
end
Run Code Online (Sandbox Code Playgroud)

索引页面显示为登录用户。这是令人难以置信的烦人。我很感激我可以使用 Devise 等,但这实际上是关于奇怪的会话行为。

我尝试过的事情:

  • 试用rake tmp:sessions:clear没有效果。
  • 用其他东西覆盖会话值。
  • 检查 _my_key cookie 值(永远不会改变???)-尽管我确实在响应标头中返回了具有不同值的设置值...?这似乎有点奇怪。
  • 涡轮链接已被删除。
  • 使用 Rails 4.0.0 和 Ruby 2.0.0 …

ruby session ruby-on-rails ruby-on-rails-4

5
推荐指数
1
解决办法
3609
查看次数

标签 统计

ruby ×1

ruby-on-rails ×1

ruby-on-rails-4 ×1

session ×1