新聞發布系統技術總結(一)Cookies and Session,cookies和session
這篇文章緊接上篇部落格牛腩新聞發布系統——技術總結,總是感覺牛腩裡面有很多的知識,有太多的要我們去仔細咀嚼,雖然讓我們增長了見識,瞭解B/S的架構,但是實戰的知識還是要牢固,為的是讓自己在這個階段走的踏實。
上一篇部落格是一個大匯總,僅僅是知識的羅列,並沒有做太多的思考,下面是羅列後的升華篇。
下面是一張關於上篇部落格技術總結的圖。
接下來其中的知識的深入學習之(一):Cookie和Session
在系統中講到了使用者登入首先驗證Session裡是否存在使用者資訊而驗證登入。但是Session和Cookie是緊密聯絡的。下面就分析一下它們是怎樣聯絡的。
(一)、Session
Session代表了伺服器與用戶端之間的會話。之所以會用“會話”這個詞來形容,是因為類似我們日常生活中的打電話,一次會話的時間段中就可以當做一個Session,當掛掉電話後“會話”結束,所要記住和保留的資訊就自動消失。當一個使用者從用戶端登入頁面後,Session就會保留該使用者的資訊,直到該使用者離開這個網站,所以可以利用這個來判斷使用者是否已經登入等。這個過程就是一次“會話”。因為一個使用者登入時需要切換多個頁面,有了Session裡面的值就不需要每次輸入登入資訊,引用Session就可以讓一個使用者在訪問多個頁面的切換保留該使用者資訊。
多使用者登入,系統為每個使用者都保留一個獨立的Session來儲存資訊,並且不會互相干擾。
一種“誤解”:只要關閉瀏覽器,session就消失了。這種說法是不正確的。
(二)、Cookie
我們會時不時的對電腦進行清理一下,常用的360在進行垃圾清理時我們會看到下面的畫面,那麼Cookie裡面都是些什麼呢?
當你清理完成後,會發現一些網頁記住密碼還得重新輸入,瀏覽過的一些購物網站的收藏歷史記錄都會消失,這是為什麼呢?是的。因為我們清理掉了Cookies。
我們一定遇到過在登入一個需要輸入使用者名稱和密碼的網頁,當下一次登入發現不必輸入就可以登入了。這就是第一次登入時使用者的資訊儲存在本地Cookie中,就相當於密碼儲存在本機中,下次登入直接從本機調用。也是一種記憶功能。
Cookie儲存在記憶體或硬碟上,儲存在記憶體上的Cookie會隨著瀏覽器的關閉而消失;儲存在硬碟上再次開啟瀏覽器仍然有效指導設定的有效期間到期。
當然為了保證上網安全我們可以對Cookie進行設定,調整它的安全層級。
(三)、Cookie和Session的聯絡
Cookie是在用戶端保持狀態,Session是在伺服器端保持狀態。由於伺服器端保持狀態在用戶端也需要儲存一個標識,所以Session需要藉助於Cookie來達到儲存標識的目的。瀏覽器按照一定的原則在後台發送給伺服器的。
舉個例子:理髮店辦理會員卡
理髮店經常做一些活動,像什麼滿五次做頭髮就送一次“價值不菲”的營養等。但是怎知道一個學生是不是滿了五次呢!我們就可以把學生看成是用戶端,理髮店看成是伺服器。理髮店很聰明,採用卡記錄的方式:
1、給學生一張卡,上面標明有效日期,必須在這個期間內滿五次使用。學生沒來消費一次就在這個卡片上記錄一次,學生消費的次數儲存在學生自己身上。這就相當於在用戶端保持狀態。相當於本地的Cookies,這個有效日期就是Cookies設定的有效時間。
2、給學生一張會員卡,學生看不到卡內儲存的資訊,每次學生消費時在理髮店刷卡,理髮店員可以看到學生這個卡號內消費了多少次,如果滿五次就免費送一次營養。這就是在伺服器端保持狀態。相當於儲存在了Session裡。
當在理髮店儲存了你的資訊之後,你本人手上還是有一張卡的,你是知道卡號的,所以理髮店是需要你本人的一個標識(卡號)的,所以Session機制需要藉助於Cookie機制。還有其他的選擇。這樣,Cookie就和Session很好的聯絡起來了。
也許在您看來我的理解並不是很深刻,歡迎大家相互交流以及指出我的不足。
期待下一篇部落格對一般處理常式的淺入淺出的理解。
描述Cookie與Session的作用,不同與各自的應用範圍,Session工作原理
作用:
伺服器可以利用Cookies或Session包含資訊的任意性來篩選並經常性維護這些資訊,以判斷在HTTP傳輸中的狀態。它們最典型的應用是判定註冊使用者是否已經登入網站,使用者可能會得到提示,是否在下一次進入此網站時保留使用者資訊以便簡化登入手續。另一個重要應用場合是“購物車”之類處理。使用者可能會在一段時間內在同一家網站的不同頁面中選擇不同的商品,這些資訊都會寫入Cookies或Session,以便在最後付款時提取資訊。總而言之,cookies和session就是能夠記錄顧客狀態的技術,儘管二者屬於不同的技術,但只要cookies能做到的,session也能做到
區別和聯絡、工作原理等:
打個比方:在河南時,我常到一家熟食店買饞嘴鴨,該店老闆為了促進銷售,特發布“每購滿10隻即可免費贈送一隻”的優惠措施。除了家裡有什麼紅白喜事要饗客之外,應該不會有人一次性購買10隻烤鴨吧?所以老闆得想個法子來記錄顧客的消費數量,這裡總共有三種方案:
Ⅰ、老闆記住每一個顧客的消費數量,等到顧客消費滿10隻的時候自動奉送一隻。這好比HTTP協議本身是有狀態的,可以記住顧客的活動行為。但遺憾的是,出於種種考慮http協議本身是不能有狀態的,老闆自個也沒有這麼超常的記憶力,故這種方案行不通!
Ⅱ、老闆發給顧客一張積分卡,上面記錄著消費的數量,一般還有個有效期間限。每次買烤鴨時,如果顧客出示這張卡片,老闆就知道這位顧客曾經光顧過小店。這種做法就是在用戶端保持狀態,好比是cookie技術。開啟(windows系統)C:\Documents and Settings\使用者名稱\Cookies,你會發現一些*.txt格式的小檔案,這就是你瀏覽某些網站,它們發給你的“積分卡”(cookies)。
Ⅲ、老闆發給顧客一張會員卡,除了卡號之外什麼資訊也不紀錄,每次買烤鴨時,如果顧客出示該卡片,則老闆搬出店裡的劃名冊,找到你的卡號並加1個積分。這種做法就是在伺服器端保持狀態。
好比是session技術。
cookie和session最大的區別在於: cookie是把積分卡發給顧客,上面記錄了顧客所有的消費資訊。Session則是把只有卡號(session id)的積分卡發給顧客,自家記錄了顧客所有的消費資訊。Cookie是儲存在用戶端的;session是儲存在伺服器端,而session id則是儲存在用戶端,通常也是一個cookie小檔案,由於這個小檔案除了session id(好比卡號)外什麼也沒有,因此比cookie安全多了。
具體來說cookie機制採用的是在用戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於採用伺服器端保持狀態的方案在用戶端也需要儲存一個標識,所以session機制可能需要藉助於cookie機制來達到儲存標識的目的,但實際上它還有其他選擇。
cookie機制。正統的cookie分發是通過擴充HTTP協議來實現的,伺服器通過在HTTP的回應標頭中加上一行特殊的指示以提示瀏覽器按照指示產生相應的cookie。然而純粹的用戶端指令碼如JavaScript或者VBScript也可以產生cookie。而cookie的使用是由瀏覽器按照一定的原則在後台自動發送給伺服器的。瀏覽器檢查所有儲存的cookie,如果某個cookie所聲明的作用範圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP要求標頭上發送給伺服器。
cookie的內容主要包括:名字,值,到期時間......餘下全文>>
大家說說session與cookies那個安全性高一點?
就大型應用來說,推薦cookies
因為往往比較大的伺服器電訊廠商都會採用負載平衡。顧名思義就是由多個伺服器組成,當訪問一個頁面時session在其中一個伺服器,當跳轉到另一個頁面時,可能訪問的伺服器改變了,因此就會找不到這個session,後果大家應該很清楚。
但是如果是個人運營伺服器的話,往往不會架設2個或2個以上的伺服器,因此不必要考慮哪個安全性好的問題。
但是為項目長久打算,本人推薦cookies