2010-06-04 82 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。

奇怪。