iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
0
自我挑戰組

Ruby on Rails 新手的30個問題!系列 第 9

Day_09 sessions in Rails?

嗨!各位朋友大家好,打給後,歹嘎吼,胎尬喉,我是阿圓,開始之前一樣有請今天one piece!

(喜歡布魯克跟拉布!)

前情提要

昨天我們把 cookie 實作 session 的兩種方式簡單的介紹了一下,幫大家回顧一下:

  1. Cookie-based session
    將狀態通通寫在 cookie 裡,並加密。缺點是狀態多的時候, cookie 會很肥,而瀏覽器存 cookie 是有限制的,超過就不給存了。
  2. Session-based session
    發session ID給瀏覽器並存成cookie,其他的狀態放在server裡,利用cookie裡的sessionID,來決定狀態。

正文開始

那 Rails 實作 session 的方式是什麼呢???我寫到這邊,早就覺得 Session-based session 的實作方式比較好,畢竟cookie 只存sessionID ,被取得資料的風險又更小了,而且又沒有大小限制的問題。

但是!But!しかし!

Rails是用 Cookie-based session 的方式來實作的,因為這種方式比其他的方案都還要快,官方文件也有貼心提醒各位是這樣運作,有幾個安全性的問體要考慮,以下是官方文件的文字:

Rails CookieStore saves the session hash in a cookie on the client-side. The server retrieves the session hash from the cookie and eliminates the need for a session ID. That will greatly increase the speed of the application, but it is a controversial storage option and you have to think about the security implications and storage limitations of it:

不外乎是記得要考慮以下幾點:

  1. cookie 的檔案最大只能到4kB,請只存 session 相關的資訊
  2. cookie 是存在在 client 端的,有可能洩漏,請不要存敏感資訊
  3. cookie 是暫時存在的(可能隨時被清除),請將永久的資訊放在 server 端
  4. cookie 無法讓自身失效,而且可以被惡意的重用,建議最好設置一段時間讓 sessionID 失效
  5. Rails 預設會加密你的 cookie,只要你好好保管加密方式,基本上,cookie是安全的

以上大約是 Rails 實作 session 的方式,所以大家在寫專案的時候要注意,session 跟 cookie 存了什麼喔!

By th way,其實官方文件寫得很棒,還介紹了一些hacker攻擊的手法,有時間大家可以看一下。
感謝各位看到這邊,若有任何建議,請各位不吝指教!我們明天見!


參考文章

官方文件
深入 Session 與 Cookie:Express、PHP 與 Rails 的實作


上一篇
Day_08 cookie?
下一篇
Day_10 問題中場休息 & 部落格的管理員系統
系列文
Ruby on Rails 新手的30個問題!30

尚未有邦友留言

立即登入留言