老生常談session,cookie的區別,安全性

2021-07-09 04:29:58 字數 2605 閱讀 5437

一,為什麼session,cookie經常會有人提到

做web開發的人基本上都會用session和cookie,但是僅僅只是會用,並不知道session和cookie的真正的工作原理,都只是憑著感覺來猜測。web開發者只要利用它們來完成工作就行了,所以每個人的理解基本都會有大同小異,我想這就是session,cookie經常會被討論的原因。本文也是根據個人經驗,以及個人所學,對session,cookie的一些看法,純屬個人見解,希望得到大家的更正和建議。

二,什麼cookie

cookie分為二種

1,以檔案方式存在硬碟空間上的長期性的cookie

2,停留在瀏覽器所佔記憶體中的臨時性的cookie

瀏覽**時,你會經常發現**登入的地方,會有提示,問你是不是要記住自己的登入狀態,也就是自動登入,像這種情況,cookie將被存放在客戶端的硬碟上。

當使用者登入後,session會在cookie端產生乙個session_id,這個session_id是存於瀏覽器所占用的記憶體當中。當你關閉瀏覽器後,session_id也要消失了。

cookie採用的是在客戶端保持狀態的方案,它是客戶端的會話狀態的一種儲存機制。它是伺服器在本地機器上儲存的小段文字或者是記憶體中的一段資料,並隨每乙個請求傳送至同乙個伺服器。ietf rfc 2965 http state management mechanism 是通用cookie規範。網路伺服器用http頭資訊向客戶端傳送cookies,在客戶終端,瀏覽器解析這些cookies並將它們儲存為乙個本地檔案,或者本地記憶體中資料,它會自動將對一伺服器的任何請求縛上這些cookies,由於採用伺服器端保持狀態的方案在客戶端也需要儲存乙個標識,所以session機制借助於cookie機制來達到儲存標識的目的,這樣就可以解決http協議無狀態的缺陷。

三,什麼是session

session是一種伺服器端的資訊管理機制,它把這些檔案資訊以檔案的形勢存放在伺服器的硬碟空間上,這種情況是預設的,可以用memcache把這種資料放到記憶體裡面。請參考web集群時利用memcache來同步session

當客戶端向伺服器發出請求時,要求伺服器端產生乙個session時,伺服器端會先檢查一下,客戶端的cookie裡面有沒有session_id,是否已經過期。如果有這樣的session_id的話,伺服器端會根據cookie裡的session_id把伺服器的session檢索出來。如果沒有這樣的session_id的話,伺服器端會重新建立乙個。phpsessid是一串加了密的字串,它的生成按照一定的規則來執行。同一客戶端啟動二次session_start的話,session_id是不一樣的。

上面是一次請求的頭資訊。

session產生的session_id放在cookie裡面,如果使用者把cookie禁止掉,是不是session也不能用了呢?禁止掉cookie後,session當然可以用,不過通過其他的方式來獲得這個sessionid,比如,可以根在url的後面,或者以表單的形勢提交到伺服器端。從而使伺服器端了解客戶端的狀態。

四,session和cookie誰更安全

就個人而言,我覺得session更安全一點,我以下幾點看法。

1,如果session和cookie一樣安全的話,二者就沒有並要同時存在了,只要cookie就好了,讓客戶端來分提伺服器的負擔,並且對於使用者來說又是透明的。何樂而不為呢。

2,session的sessionid是放在cookie裡,要想攻破session的話,第一要功破cookie。功破cookie後,你要得到 sessionid,sessionid是要有人登入,或者啟動session_start才會有,你不知道什麼時候會有人登入。第二,sessionid是加密的,第二次session_start的時候,前一次的sessionid就沒有用了,session過期時sessionid也會失效,想在短時間內功破加了密的 sessionid(注意加密之後才放到cookies裡面)很難。session是針對某一次通訊而言,會話結束session也就隨著消失了,而真正的cookie存在於客戶端硬碟上的乙個文字檔案,誰安全很顯然了。

3,如果session這麼容易被功破,這麼不安全的話,我想現有的絕大部分**都不安全了。

聖杯布局,老生常談

聖杯布局的定義應該是乙個header,乙個footer,中間是container,包含乙個自適應寬度的center,center左邊和右邊各有乙個寬度確定的div,大概是這樣 1 使用普通的css來表現 首先是基本的html header middle left right footer 然後我們簡...

老生常談session cookie的區別 安全性

一,為什麼session,cookie經常會有人提到 做web開發的人基本上都會用session和cookie,但是僅僅只是會用,並不知道session和cookie的真正的工作原理,都只是憑著感覺來猜測。web開發者只要利用它們來完成工作就行了,所以每個人的理解基本都會有大同小異,我想這就是ses...

老生常談,正確使用memset

前段專案中發現乙個問題,程式總是在某個dynamic cast進行動態轉換時出異常,查了半天才發現問題原來是出在memset的使用上,雖然問題本身顯而易見,但當處於幾十萬行 量級中時,就變得不太那麼容易定位了。本文歸納了下使用memset幾個需要注意的地方,雖然內容很簡單,但也希望對大家有所幫助。1...