Sessions

HTTP 協定沒有狀態,它會視每個請求為獨立的事務,無法使用之前請求的資訊。這表示在 HTTP 協定中,無法在兩個頁面之間記住使用者的身份。需要使用者登入的 web APP 都要使用 session,它會在兩台電腦之間半永久性的連結,例如瀏覽器的客戶端電腦和 Rails server。

在 Rails 中實作 session 的常見技術是使用 cookies,它是儲存在使用者瀏覽器上的一小塊文字(small pieces of text),因為 cookies 可以在不同頁面持續存在,所以可以用來儲存資訊(例如使用者 ID),讓 APP 可以從資料庫取回已登入的使用者。

在這節跟下一節中,我們會使用 Rails 的 session 方法來建立短暫的 sessions,直到瀏覽器關閉,它就會自動失效。後面我們還會建立一個壽命比較長的 sessions,使用 Rails 的 cookies 方法。

把建立 sessions 模型(model)視為 RESTful 資源是一件很方便的事:

  • 瀏覽登入頁面時會渲染一個表單,用來新建 session(new session)
  • 登入的時候會建立一個 session(create session)
  • 登出的時候會刪除這個 session(destroy session)

Users resource 是使用資料庫後端(透過 User model)來續存資料;Sessions resource 則是用 cookies,登入功能的大部分工作會透過基於 cookie (cookie-based)的身份驗證機制實作。

在這一節和下一節要為登入功能做準備,會先建立一個 Sessions controller、一個登入表單、以及相關的 actions。

先來開個新分支:

$ git checkout master
$ git checkout -b log-in-log-out