2012-05-04 42 views
15
use Rack::Session::Pool 
... 
session[:msg]="Hello Rack" 

編輯:單詞會話似乎沒有解決。我包含會話池中間件在我的config.ru,並嘗試設置ERB文件中的變量(我使用Ruby服務),它抱怨「未定義的本地變量或方法`會話」如何在Rack應用程序中設置/獲取會話變量?

謝謝!

+2

什麼並不完全工作?會話幫助程序根本沒有工作,或者僅僅是會話[:msg]沒有設置? session.inspect會給你什麼? – oliverbarnes

回答

26

session是一種方法,是一些web框架的一部分,例如SinatraRails都有session方法。普通rack應用程序沒有session方法,除非您自己添加一個方法。

會話哈希值存儲在機架ENV散列下的關鍵rack.session,這樣你就可以像這樣訪問它(假設你已經命名的機架環境到您的應用env):

env['rack.session'][:msg]="Hello Rack" 

另外,你可以使用機架內置的request object,像這樣:

request = Rack::Request.new(env) 
request.session[:msg]="Hello Rack" 
+0

清楚的解釋!真的有幫助,歡呼隊友! – rebnoob

+0

但是爲什麼你也可以這樣做:'request.env ['rack.session'] [:msg] =「Hello Rack」?如果我正確地理解了這個,'Rack :: Request'是'env'的一個包裝器,但是如果是這樣的話,request.env [...'是有意義的嗎?我無法理解它:\ –

+0

@ jj_'Rack :: Request'是'env'散列的一個包裝,它允許您輕鬆做各種常見的事情,並且它還提供對'env'散列的訪問如果您需要直接將它用於'Rack :: Request'不提供的內容。 – matt