cookies 概念

常常聽說有些網站會在我的電腦上放 cookies,這是怎麼回事?其實 cookies 只是個放在使用者端的文字檔,裡面記一些變數。 當你去瀏覽一個網站時,那台伺服器可能會把 cookie 放在你的電腦。你再跟它要資料時,它會跟你的瀏覽器要 cookie。 要到之後它就可以看以前儲存的變數了。rails 就是利用 cookies 來放 session 需要用的辨識碼。有些使用者不允許 cookies, 這樣的話 rails 就沒辦法儲存 session,不允許 cookies 的人也就無法登入網站了。

存/取 cookies

你自己也可以寫一些變數存在使用者的電腦上,但是要記得使用者可以隨時用自己的瀏覽器把你放的 cookie 丟掉。 要存 cookies 的話很簡單。如果我要存的 cookie 叫做 “rewards” 的話:

cookies[:rewards] = "teddy bear"

之後要用的方式:

earned_rewards = cookies[:rewards]

就這樣啦。 cookie 的值一定要是 string,不然會有錯誤訊息。

cookies 參數

在設 cookies 時,如果沒加其他的參數,你放的 cookie 就永遠不會過期,會一直待在使用者的電腦上 (除非他把 cookies 清掉)。以上面的範列來說,我們可以多加一些參數:

cookies[:rewards] = { :value   => "teddy bear",
                      :expires => 5.weeks.from_now,
                      :path    => "/my_first_app",
                      :domain  => "somesite.com",
                      :secure  => true}

:expires 是設定這個 cookie 的有效期限。

:path 是設定 request 的路徑。也就是說,使用者要瀏覽的路徑裡,在 domain 的名稱後一定要由 “/my_first_app” 開始 cookie 才可以用。可以用的意思是使用者的瀏覽器會把你所要的 cookie 傳回你的 server。
使用者如果瀏覽
http://somesite.com/my_first_app/ 的話,存在電腦裡的 cookie 會被傳回到你的伺服器,
http://sm1.somesite.com/my_first_app/homework/page1.html 也會,但
http://sm1.somesite.com/shop/homework/page1.html 就不行了。

:domain 就是設定說網站名稱的最後一部份要跟設定值相同,不然 cookie 不能使用。 像
http://somesite.com/ 可以,
http://sm1.somesite.com/ 也可以,可是
http://somesite.org/ 就不行了。

:secure 如果是 true 的話,只有透過 “https://” cookie 才會被傳回來。