Rails 中 session的用法如下
session[:user_id] = "aaaaaa"
複製程式碼
取值也用同樣的辦法:
user_id = session[:user_id]
複製程式碼
在前端若需要用到session中的值,則需要用ajax調取。
在rails的Controller裡尋找返回session的方法,發現session有一個as_json方法,能夠將session打包成json個體,這樣只要在Controller裡render :json
就可以了。
但實際使用後發現這個方法將session裡的所有值都調取了過來,如"session_id"這樣敏感的值也包含在裡頭:
{ "session_id"=>"1c71e95cdc235aa2ebb14fe48c6bea63", "_csrf_token"=>"R+tkH3t8OwjaeYDYi4xwgZuKsI/cMHsRUW3uRit/pZc=", "mid"=>"581fed0aa5af3c089848956c", "login"=>true, "name"=>"alfred", "nick"=>"alfred" }
這就很尷尬了。
看了下文件,這個“as_json()”方法有個預設為nil的引數option, 網上搜不到用例。 就重新回去看文件:
...
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如下
session.as_json(:except => ["session_id","_csrf_token"])
複製程式碼
也可以使用":only"和":include"關鍵詞
返回的值就可以控制了
{
"mid"=>"581fed0aa5af3c089848956c",
"login"=>true,
"name"=>"alfred",
"nick"=>"alfred",
"member"=>"581fed0aa5af3c089848956c"
}
複製程式碼