在Rails 2中使用cookie存储设置会话变量时,我可以看到_domain_session变量按预期设置,并显示在浏览器的cookie中。但是,每当我尝试访问request.session哈希时,它总是为空,除非在设置会话后立即执行。
# In a controller
Rails.logger.debug "BEFORE SESSION_ID: #{request.session_options[:id]}"
session[:user_id] = fbs[:uid]
session[:access_token] = fbs[:access_token]
render :text => '"Success"'
Rails.logger.debug "SESSION_ID: #{request.session_options[:id]}"
以上代码将始终显示
BEFORE SESSION_ID:
SESSION_ID: f8db970260cb969156304a421036a8fb
意味着只要将任何内容添加到会话哈希中,就会设置会话ID,但不知何故会在下一个请求之前重置。我没有看到任何应该重置会话的地方。
为什么我可以看到正在设置会话cookie但我无法通过会话变量访问数据?
答案 0 :(得分:4)
想出来。 似乎会话加载是懒惰的。
在您尝试访问会话之前,不会让您查看会话选项。
如果我把
if session.present?
end
在代码上方,会话被加载,我可以查看session_options。
奇妙。