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

一,爲何session,cookie常常會有人提到php

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


二,什麼cookiehtml

cookie分爲二種web

1,以文件方式存在硬盤空間上的長期性的cookie數組

2,停留在瀏覽器所佔內存中的臨時性的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協議無狀態的缺陷。服務器

三,什麼是sessioncookie

session是一種服務器端的信息管理機制,它把這些文件信息以文件的形勢存放在服務器的硬盤空間上,這種狀況是默認的,能夠用memcache把這種數據放到內存裏面。請參考web集羣時利用memcache來同步session

當客戶端向服務器發出請求時,要求服務器端產生一個session時,服務器端會先檢查一下,客戶端的cookie裏面有沒有session_id,是否已通過期。若是有這樣的session_id的話,服務器端會根據cookie裏的session_id把服務器的session檢索出來。若是沒有這樣的session_id的話,服務器端會從新創建一個。PHPSESSID是一串加了密的字符串,它的生成按照必定的規則來執行。同一客戶端啓動二次session_start的話,session_id是不同的。

Host *****************.com
User-Agent Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6
Accept text/css,*/*;q=0.1
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset UTF-8,*
Keep-Alive 115
Connection keep-alive
Referer http://***************.com/
Cookie BX=7f34kbl5d3m3g&b=3&s=9t; AWSUSER_ID=awsuser_id1267685109158r8091; PHPSESSID=us1o22h4iveo4uni3iksabreh4
If-Modified-Since Tue, 29 Jun 2010 07:55:38 GMT

上面是一次請求的頭信息。

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很難。session是針對某一次通訊而言,會話結束session也就隨着消失了,而真正的cookie存在於客戶端硬盤上的一個文本文件,誰安全很顯然了。

3,若是session這麼容易被功破,這麼不安全的話,我想現有的絕大部分網站都不安全了。


一、做用域控制對象

(1)做用

表示一個對象的存在範圍

(2)分類

A:當前jsp文件(當前jsp編譯生成的類文件

page  默認的

特例:包含指令實現包含效果時,在被包含文件中聲明的對象。


B:具備明確請求傳遞關係的兩個jsp文件

request:利用屬性(一鍵一值)實現的對象存儲。

request中屬性存儲的對象信息,會在接受請求的文件執行完成後自動清除

使用場景:頁面轉發效果時,進行的值的傳遞。


C:客戶端信息的存儲方式

第一種:用戶(客戶端)信息存儲方式:用戶信息所有由客戶端實現存儲和管理。

第二種:服務器端的信息存儲。信息統一存儲到服務器上。


技術上的實現:

客戶端存儲方式:Cookie

服務器端的信息存儲:Session application


二、Cookie

(1)理解

「小甜餅」。存儲在客戶端機器瀏覽器臨時目錄中,實現用戶基本信息存儲的臨時文本文件。

(2)特徵

A:是文本文件

B:是臨時性的文本文件。

C:文件的大小通常不超過1K

D:存儲在瀏覽器的臨時目錄

E:默認的,COOKIE對於瀏覽器不兼容,對WEB應用程序共享

F:cookie以名稱與值的方式存儲用戶的基本信息。

G:存儲信息的做用域是:一個瀏覽器訪問的多個頁面

H:cookie會泄露用戶我的隱私

I:cookie是會被客戶端禁用的

(3)應用

A:建立cookie

Cookie  cookie=new Cookie("名稱",「值」);

一個cookie只能存儲一個值,一個Cookie文件能夠存儲多個Cookie


B:指定cookie的生效期

明確cookie文件的存在時間。

cookie的分類:會話級ccokie和永久性cookie。

會話級cookie:cookie只在當前用戶訪問過程當中,在緩存中存在。用戶一退出,cookie自動清除。程序上的體現:不指定cookie的保存時間。

永久性cookie:一明確cookie的存在時間了,cookie文件就會在客戶端機器中建立。一建立,就認爲是永久性的。


cookie.setMaxAge(int)--->爲單位


C:輸出cookie

在客戶端創建文本

response.addCookie(cookie)


D:從客戶端得到Cookie

request.getCookies()---->數組。客戶端當前瀏覽器中全部cookie組成的集合。



   如何查看服務器端輸送到咱們電腦中的這些Cookie信息:


  蘇斌老師講解:做用域控制對象、Cookie <wbr>and <wbr>Session
     點開IE瀏覽器或其餘瀏覽器,在菜單欄中有工具選項,點開有InterNet選項
      蘇斌老師講解:做用域控制對象、Cookie <wbr>and <wbr>Session
    Cookie名稱、來源、文件格式(文本文件)、文件大小(1K以內)蘇斌老師講解:做用域控制對象、Cookie <wbr>and <wbr>Session
   Cookie有效期
蘇斌老師講解:做用域控制對象、Cookie <wbr>and <wbr>Session

雙擊一個Cookie文件,咱們能夠看到以*分割的信息:
蘇斌老師講解:做用域控制對象、Cookie <wbr>and <wbr>Session



(4)集合應用場景

cookie版的計數器:歡迎。。。光臨,這是您第?次訪問本站。

記錄客戶簡單的喜愛信息:亞馬遜



四、客戶端信息的跟蹤方式

如何識別客戶信息:

(1)利用cookie

(2)利用url重寫

(3)隱藏域

(4)session



五、session

(1)理解

會話客戶端與服務器端的一組信息的交互。

(2)做用

服務器緩存上,分配出來的,存儲單個用戶信息的空間。

(3)特色

A:session存儲的信息是在服務器的緩存上存儲的

B:每一個用戶,只要一訪問web應用(典型的登陸),服務器立刻會爲此用戶分配一個獨立的緩存空間

C:每一個session。系統都會自動產生一個惟一標記的SessionID,用於區別。此id稱爲jsessionid、SessionID,以會話級cookie的方式存儲的客戶端緩存上。用於區分每個用戶。

D:session中能夠存儲任何的對象信息(典型的購物車)

E:session是有生效期的,執行的是會話超時的工做機制。Tomcat中默認時間是30分鐘。IIS中默認二十分鐘。

F:session中的信息,是在一個用戶在一個瀏覽器中的不一樣頁面上共享的(注意區別:Cookie是在同一個瀏覽器的全部頁面中能夠共享)。

相關文章
相關標籤/搜索