2010-06-04 180 views
1

在Rails 2中使用Cookie存储设置会话变量时,我可以看到_domain_session变量按预期设置,并显示在浏览器的cookie中。但是,每当我尝试访问request.session哈希时,除了在设置会话之后立即除外,它总是空的。Rails cookie被设置,cookie中的会话变量可读,会话不可读

# 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正在设置但我无法通过会话变量访问数据?

回答

4

想通了。 似乎会话加载是懒惰的。

在您尝试访问会话之前,它不会让您查看会话选项。

如果我把

if session.present? 
end 

上面的代码中,会话被加载,我可以看看session_options。

奇怪。