Cookie和Session的區別

恢復博客

hin久沒有寫blog了,現在決定恢復。先寫兩個有趣的事情。

  • 異常處理 try catch
  • 字符串變量

異常處理 try catch

之前處理分享的時候,由於更換了賬號名和密碼導致報錯,這裏面一個是前面的邏輯不夠嚴謹,同時並沒有利用好PHP的異常處理。

異常處理是一個比較有趣的辦法,來防止你邏輯不夠縝密犯下更大的錯誤。如果你代碼的邏輯足夠嚴謹,那麼實際上if else這些條件判斷就可以實現。

之後在,在laravel使用redis的時候,因爲laravel的redis連接報錯,導致了程序無法運行,也就是如果redis宕了的話,網站就無法運行了,從redis數據的重要性,這個是合理的,但是從網站的正常運營來說,這肯定是不合理的。

所以,直接使用try catch 把不是那麼重要的代碼保護起來,防止報錯。

簡而言之,try catch就是用來健壯你的代碼。同時要注意,try catch會影響你代碼的嚴謹性。

字符串變量

字符串變量是因爲同事想寫一個類的統一處理方法的時候,想根據傳進入的具體值實現不同的處理。
其實在PHP使用大括號就可以實現{{ }}這個功能

做Web網站,Session和Cookie是沒有辦法繞過的彎道。
因爲HTTP協議是一種無狀態協議,但是用戶的登錄,離線卻是有狀態的,要想保持這種狀態,就引入了Cookie技術。

Cookie是服務器在本地機器上存儲的小段文本,並隨着每一個請求發送到同一服務器。Web服務器通過HTTP頭想客戶端發送Cookie,然後客戶端解析這些Cookie,並保存到本地文件中。當瀏覽器請求同一服務器的時候,會自動帶着Cookie信息。

簡單來說,Cookie就是用來在客戶端保持狀態的方案,需要用戶打開客戶端的Cookie支持。

cookie的內容主要包括:名字 值 過期時間 路徑 域。路徑和域一起構成了Cookie的作用範圍。如果不設置過期時間,則表示這個cookie的生命期爲瀏覽器會話期間,關閉瀏覽器窗口,Cookie就消失。這種生命期爲瀏覽器會話期被稱爲會話Cookie。會話Cookie一般存在內容中,不存在硬盤中。如果設置了過期時間,瀏覽器就會把Cookie存進硬盤中。存儲在硬盤上的Cookie,可以被不同的瀏覽器進程使用(注意:瀏覽器進程,還是同一個瀏覽器)。如果是保存在內存中的瀏覽器,不同瀏覽器有不同的處理方式。

Session

而session機制採用的是一中在服務器端保存狀態的解決方案,主要的優點是安全。由於採用服務器端保持狀態的方案在客戶端也需要保存一個標誌,所以session機制可能需要藉助Cookie機制達到保存標誌的目的。

Session 是針對每一個用戶的,變量的值保存在服務器上,用一個sessionID來區分是哪個用戶的session變量,這個值是這個值是用戶的瀏覽器在訪問的時候返回給服務器,當客戶禁用Cookie時,這個值也就可能設置爲由get來返回給服務器。

當程序需要爲某個客戶端的請求創建一個session時,服務器首先會檢查這個客戶端的請求裏面是不是已經包含了一個session標誌(session_id),如果已包含則說明以前已經爲客戶端創建過session,服務器就按照session_id檢索出來使用,檢索不到或者沒有session_id,會重新創建一個新的。
保存這個session_id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發給服務器。但是Cookie可以被人爲禁止。必須有其他機制來實現,以便在Cookie禁止時仍然能夠把Session_id 傳給服務器。

常見的就是URL重寫,就是把Session_id直接附加在URL路徑的後面,還有一種技術叫做表單隱藏字段。

兩者區別

1、存取方式不同

Cookie中只能保管ASCII字符串,Session中能夠存取任何類型的數據。

2、隱私策略的不同

Cookie存儲在客戶端閱讀器中,對客戶端是可見的,客戶端一些程序可能會窺探,複製,甚至修改。Session是存在服務器,不存在敏感信息泄露的風險。

如果使用Cookie,那麼敏感的信息如賬號密碼等儘量不要寫到Cookie中。最好,想Google、Baidu那樣講Cookie信息加密,提交到服務器後在進行解密,保證Cookie中的信息只有本人能夠讀的懂。

3、有效期上的不同

使用過Google的人都曉得,假如登錄過Google,則Google的登錄信息長期有效。Google會持久地記載用戶的登錄信息。要達到這種效果,運用Cookie會是比較好的選擇。只要設置Cookie的過期時間爲一個很大的數字。

由於Session依賴於PHPSESSID的Cookie,這個過期時間要根據具體的PHP設置,PHP中的session有效期默認是1440秒(24分鐘),也就是說,客戶端超過24分鐘沒有刷新,當前Session就會失效。當然如果用戶關閉了瀏覽器,回話也就結束了,Session自然也不存在了!

PHP中Session相關配置

1、session.use_cookies:默認的值是“1”,代表SessionID使用Cookie來傳遞,反之就是使用Query_String來傳遞;

2、session.name:這個就是SessionID儲存的變量名稱,可能是Cookie,也可能是Query_String來傳遞,默認值是“PHPSESSID”;

3、session.cookie_lifetime:這個代表SessionID在客戶端Cookie儲存的時間,默認是0,代表瀏覽器一關閉SessionID就作廢……就是因爲這個所以Session不能永久使用!

4、session.gc_maxlifetime:這個是Session數據在服務器端儲存的時間,如果超過這個時間,那麼Session數據就自動刪除!

4、服務器壓力不同

Session是保管在服務器端的,如果每個用戶都會產生一個Session。如果併發用戶產生大量的Session,耗費大量的內存。因而,像Google、Baidu、Sina這樣併發訪問極高的網站,是不太可能運用Session來追蹤客戶會話的。
而Cookie保存在客戶端,不佔用服務器資源。併發十分大的時候,Cookie是一個很好的選擇。

5、瀏覽器支持的不同

Cookie是需要客戶端瀏覽器支持的。假如客戶端禁用了Cookie,或者不支持Cookie,則會話跟蹤會失效。如果不支持Cookie,使用Url重新技術,那麼所有使用到Session的URL的都要進行URL地址重寫。

6、跨域支持上不同

Cookie支持跨域訪問,Session僅在他所在的域名內有效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章