2014年11月11日 星期二

session的兩個種類(集中式,cookie-based)

session因儲存的方式不同分為兩個種類:

集中式:
ServerIDclient

舉例:在最原始的 Session 設計,大多開發者都將資料存在 Server 上,也就是你點了什麼飲料,都是記錄在 Server 裡,可能是 Database、記憶體或是檔案可以以任何一種形式儲存。然後,當你去領飲料時,店員會輸入你的號碼,用你的號碼得知你是否點過餐、點了什麼東西。

問題:
client進入不同的server的話,資料無法共享。
一般的小網站,這樣的解決方案並沒有什麼問題。但是對今天這種超大流量的網站服務來說,因為他們有無數台對外的 Server,有如無數個服務窗口,讓顧客總是隨機進入其中一個窗口來兌換飲料,所以後端怎麼存放和共享這個 session 資料,又要兼顧效能和方便維護,就變成是很大的問題。

cookie-based:
server直接把資料存在client,用clientcookie儲存session

舉例: 就是把你點什麼飲料,通通直接寫在號碼牌上。Server 就可以直接看你的號碼牌上寫了什麼,而不必花大量時間去後面建立大規模的 Server 來處理 Session

問題:Session 資料放在 cookie 裡比較快,還是放在 Server 上的資料庫比較快?
答案是放在cookie比較好。以現在頻寬限制來說,多了4k資料也不算甚麼。答案通常會是放在 cookie (以現在的頻寬限制來說,就算多了 4K 資料也不算什麼)。因為你可以省下每次 Client 連線後,去檔案或是資料庫裡挖出 Session 資料的步驟。
cookie-based只需要直接把 Client Server cookie 打開,把資料解密後取出就好,是兩次 Database 存取和一次存取的差別。


什麼是 Session 傳值?

時常會聽到『使用 Session 傳值』這類說法,其實就是利用 Session 機制儲存資料,讓不同頁面之間可以互相傳遞資料。其原理通常是使用 Query String POST body 等方法,把資料往 Server 傳之後,在 Server 端將 Client 上傳的資料存在 Session 之中。之後的連線或開啟其它頁面時,因為你拿的號碼牌是同一個,所以在不同的頁面之下,仍然可以讀到前一次所儲存在 Session 的狀態。

沒有留言:

張貼留言