從我上個轉帖:Session與Cookie的區別和聯繫 能夠看出這兩個會話工具的異同點,但如何靈活應用這兩個工具纔是咱們關注的重點! html
下面咱們經過現實網絡中的例子來分別說明Session和Cookie在WEB開發中的最佳實踐: java
當咱們註冊一個網站後,下次再次瀏覽的時候會發現系統已經自動幫咱們登陸進去了(至少能夠記住咱們的用戶名吧),省去了手動登陸的環節,很神奇吧,但這究竟是如何實現的呢?像這樣能夠持久的駐留在客戶端處只能是Cookie!
數據庫
Cookie的內容主要包括:名字、值、過時時間、路徑和域。路徑與域一塊兒構成cookie的做用範圍。若不設置過時時間,則表示這個cookie的生命期爲瀏覽器會話期間,關閉瀏覽器窗口,cookie就消失。這種生命期爲瀏覽器會話期的cookie被稱爲會話cookie。會話cookie通常不會存儲在硬盤上而是保存在內存裏,固然這種行爲並非規範規定的。若設置了過時時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過時時間。存儲在硬盤上的cookie能夠在不一樣的瀏覽器進程間共享,如兩個IE窗口。而對於保存在內存裏的cookie,不一樣的瀏覽器有不一樣的處理方式。 瀏覽器
但正是由於Cookie是持久化的保存在客戶端,因此也帶來了必定的安全隱患。黑客能夠利用這一隱患劫持用戶Cookie或提取重要的用戶信息。這就要求咱們使用Cookie時要進行必要的選擇與防禦: 緩存
1.)過時時間儘可能短; 安全
2.)控制Cookie的做用範圍; 服務器
2.)儘可能保存較少的用戶敏感信息; cookie
4.)對重要的信息進行數據加密;
網絡
固然了有時用戶瀏覽器設置了禁用Cookie,咱們這條路就走不通了,但能夠對用戶進行必要的提示。搜索網頁的時候看到了很早之前關於關閉各網站的表現的吐槽,細節處見功夫---cookie的應用和處理。
session
下面在推薦一些關於Cookie的技術資料:
如今最火的、之後依然很火的必定是電商!能夠說現代人在網上買物品已經成爲一種生活習慣了!電商爲了抓住顧客,提升用戶體驗,就千方百計在細節處下工夫!購物車做爲電商的必備裝備,實現雖然不難,但要想達到用戶最佳體驗,卻並不容易!
(1)使用Session實現
若是使用session實現一個簡單的購物車就心滿意足,那隨着後期公司規模的逐漸擴大,這樣的購物車勢必會給你的迭代與維護工做帶來極大不便!雖然這樣的購物車是基於Session,但不能徹底依賴於Session。當網站因業務的擴大須要在多臺服務器部署時問題就來了!對於特定用戶,她的第一個請求可能會被引導到一個後臺服務器上,第二個請求卻被引導到第二個服務器上,而兩臺服務器卻不能共享Session信息,這是用戶就會迷糊的發現:購物車裏的物品一會出現,一會又消失了!
因此最好把Session保存在應用以外的地方,這樣多個數據就能夠共享這些數據了,若是這個介質是持久化的,咱們就不怕服務器的異常宕機了!
(2)使用Cookie實現
購物車裏的物品通常不屬於敏感數據,這樣咱們就能夠將購物車數據存放在Cookie裏。Cookie並非僅僅由服務器端操做,JS也能夠直接讀寫Cookie來讀寫。這樣咱們就有效的減輕了服務器端的壓力了!
(3)使用Session+數據庫(緩存) 實現
把購物車數據放在能夠持久化的數據庫中也是一個很好的辦法,但這雖然保證了數據的穩定性,可是以犧牲數據庫資源爲代價的,並且讀取和修改數據庫都須要時間,因此此種方法也並不十分推薦。其餘的方法如使用緩存,雖然能夠減小IO,但卻保證不了數據持久化。
總之,使用Session+數據庫的方法,應儘量只在Session中保存儘量簡單的東西,如:字符串、數字等等。應用層面的對象放在數據庫中,而後將他們的主鍵放入Session,須要時根據Session中的主鍵來查找對象。這樣才能在下次迭代時不須要改動太多!
參考:
1.《Web開發敏捷之道-應用Rails進行敏捷Web開發-第三版》p80-84
以上權當拋磚引玉,有考慮不到的地方敬請指明,這也是個學習的過程!若是您有更多WEB開發中的最佳實踐,也請不吝賜教!