Rails 中 session的用法以下前端
session[:user_id] = "aaaaaa"
取值也用一樣的辦法:ajax
user_id = session[:user_id]
在前端若須要用到session中的值,則須要用ajax調取。json
在rails的Controller裏尋找返回session的方法,發現session有一個as_json方法,可以將session打包成json個體,這樣只要在Controller裏render :json
就能夠了。ruby
但實際使用後發現這個方法將session裏的全部值都調取了過來,如"session_id"這樣敏感的值也包含在裏頭:session
{ "session_id"=>"1c71e95cdc235aa2ebb14fe48c6bea63", "_csrf_token"=>"R+tkH3t8OwjaeYDYi4xwgZuKsI/cMHsRUW3uRit/pZc=", "mid"=>"581fed0aa5af3c089848956c", "login"=>true, "name"=>"alfred", "nick"=>"alfred" }
這就很尷尬了。app
看了下文檔,這個「as_json()」方法有個默認爲nil的參數option, 網上搜不到用例。 就從新回去看文檔:code
... def as_json(options = nil) #:nodoc: # create a subset of the hash by applying :only or :except subset = if options if attrs = options[:only] slice(*Array(attrs)) elsif attrs = options[:except] except(*Array(attrs)) else self end else self end Hash[subset.map { |k, v| [k.to_s, options ? v.as_json(options.dup) : v.as_json] }] end ....
根據文檔,調取session以下csrf
session.as_json(:except => ["session_id","_csrf_token"])
也能夠使用":only"和":include"關鍵詞
返回的值就能夠控制了token
{ "mid"=>"581fed0aa5af3c089848956c", "login"=>true, "name"=>"alfred", "nick"=>"alfred", "member"=>"581fed0aa5af3c089848956c" }