Cookie概念html
在瀏覽某些 網站 時,這些網站會把 一些數據存在 客戶端 , 用於使用網站 等跟蹤用戶,實現用戶自定義 功能.程序員
是否設置過時時間:web
若是不設置 過時時間,則表示這個 Cookie生命週期爲 瀏覽器會話期間 , 只要關閉瀏覽器,cookie就消失了.瀏覽器
這個生命期爲瀏覽會話期的cookie,就是會話Cookie;安全
存儲: 通常保存在 內存,不在硬盤;服務器
若是設置了過時時間, 瀏覽器會把cookie保存在硬盤上,關閉再打開瀏覽器, 這些cookie 依然有效直到 超過的設置過時時間;cookie
存儲在硬盤上的Cookie能夠在不一樣的瀏覽器進程間共享,好比兩個IE窗口。
而對於保存 在內存的Cookie,不一樣的瀏覽器有不一樣的處理方式。
原理:
若是瀏覽器使用的是 cookie,那麼全部的數據都保存在瀏覽器端,
好比你登陸之後,服務器設置了 cookie用戶名(username),那麼,當你再次請求服務器的時候,瀏覽器會將username一塊發送給服務器,這些變量有必定的特殊標記。
服 務器會解釋爲 cookie變量。
因此只要不關閉瀏覽器,那麼 cookie變量便一直是有效的,因此可以保證長時間不掉線。
若是你可以截獲某個用戶的 cookie變量,而後僞造一個數據包發送過去,那麼服務器仍是認爲你是合法的。因此,使用 cookie被攻擊的可能性比較大。
若是設置了的有效時間,那麼它會將 cookie保存在客戶端的硬盤上,下次再訪問該網站的時候,瀏覽器先檢查有沒有 cookie,若是有的話,就讀取該 cookie,而後發送給服務器。
若是你在機器上面保存了某個論壇 cookie,有效期是一年,若是有人入侵你的機器,將你的 cookie拷走,而後放在他的瀏覽器的目錄下面,那麼他登陸該網站的時候就是用你的的身份登陸的。
因此 cookie是能夠僞造的。
固然,僞造的時候須要主意,直接copy cookie文件到 cookie目錄,瀏覽器是不認的,
他有一個index.dat文件,存儲了 cookie文件的創建時間,以及是否有修改,因此你必須先要有該網站的 cookie文件,而且要從保證時間上騙過瀏覽器,
曾經在學校的vbb論壇上面作過試驗,copy別人的 cookie登陸,冒用了別人的名義發帖子,徹底沒有問題。
cookie 用法:
setcookie("user","zy",time()+3600); 設置user爲zy,一小時以後失效;
$_COOKIE['user']; 取回user值(名字)
setcookie("user","",time()-3600); 刪除cookie,第二個參數爲空,第三個時間設置爲小於系統的當前時間便可.
或在瀏覽器設置
在使用Cookie時,Cookie自動生成一個文本文件存儲在IE瀏覽器的Cookie臨時文件夾中,應用瀏覽器刪除Cookie文件的具體操做步驟爲
>選擇IE瀏覽器中的工具/internet選項命令,打開Internet選項對話框,
>在常規選項卡中單擊刪除Cookie按鈕,在彈出的對話框中單擊肯定按鈕,便可成功刪除所有Cookie文件.
Session的概念session
Session 是存放在服務器端的相似於HashTable結構(每一種web開發技術的實現可能不同,下文直接稱之爲HashTable)來存放用戶數據;
做用:實現網頁之間數據傳遞,是一個存儲在服務器端的對象集合。
原理:當用戶請求一個Asp.net頁面時,系統將自動建立一個Session;退出應用程序或關閉服務器時,該Session撤銷。系統在建立Session時將爲其分配一個長長的字符串標識,以實現對Session進行管理與跟蹤。
session機制是一種服務器端的機制,服務器使用一種相似於散列表的結構(也可能就是使用散列表)來保存信息。併發
保存:app
存儲在Server段的內存進程中的,而這個進程至關不穩定,常常會重啓,這樣重啓的話,就會形成Session失效,用戶就必需要從新登陸,用戶體驗至關差,好比用戶在填寫資料,快要結束的時候Session失效,直接跳到登陸頁面;
是否已經建立過session:
當程序須要爲某個客戶端的請求建立一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識(稱爲session id),
若是已包含則說明之前已經爲此客戶端建立過session,服務器就按照session id把這個session檢索出來....使用(檢索不到,會新建一個),
若是客戶端請求不包含session id,則爲此客戶端建立一個session而且生成一個與此session相關聯的session id,
session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。
(總結: 建立一個session時,服務器看這個客戶端 是否包含session標識, 是的話按照session id把session檢索出來,不然就得 新建一個.)
Session的客戶端實現形式(即Session ID的保存方法):
通常瀏覽器提供了兩種方式來保存,還有一種是程序員使用html隱藏域的方式自定義實現:
[1] 使用Cookie來保存,這是最多見的方法,本文「記住個人登陸狀態」功能的實現正式基於這種方式的。
服務器經過設置Cookie的方式將Session ID發送到瀏覽器。
若是咱們不設置這個過時時間,那麼這個Cookie將不存放在硬盤上,當瀏覽器關閉的時候,Cookie就消失了,這個Session ID就丟失了。
若是咱們設置這個時間爲若干天以後,那麼這個Cookie會保存在客戶端硬盤中,即便瀏覽器關閉,這個值仍然存在,下次訪問相應網站時,同 樣會發送到服務器上。
[2] 使用URL附加信息的方式,也就是像咱們常常看到JSP網站會有aaa.jsp?JSESSIONID=*同樣的。這種方式和第一種方式裏面不設置Cookie過時時間是同樣的。(URL重寫,就是把session id直接附加在URL路徑的後面。)
[3] 第三種方式是在頁面表單裏面增長隱藏域,這種方式實際上和第二種方式同樣,只不過前者經過GET方式發送數據,後者使用POST方式發送數據。可是明顯後者比較麻煩。
表單隱藏字段就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時可以把session id傳遞迴服務器。好比:
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text">
</form>
實際上這種技術能夠簡單的用對action應用URL重寫來代替。
session 用法:
用戶信息保存到session前,先啓動;
session_start(); 啓動session
$_SESSION['user']="zy"; 設置用戶名
unset($_SESSION['user']); 銷燬用戶名
session_destory(); 失去已經存儲的session的數據
cookie 和session 的區別:
一、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上.
簡單的說,當你登陸一個網站的時候,若是web服務器端使用的是session,那麼全部的數據都保存在服務器上面,
客戶端每次請求服務器的時候會發送 當前會話的session_id,服務器根據當前session_id判斷相應的用戶數據標誌,以肯定用戶是否登陸,或具備某種權限。
因爲數據是存儲在服務器 上面,因此你不能僞造,可是若是你可以獲取某個登陸用戶的session_id,用特殊的瀏覽器僞造該用戶的請求也是可以成功的。
session_id是服務 器和客戶端連接時候隨機分配的,通常來講是不會有重複,但若是有大量的併發請求,也不是沒有重複的可能性,我曾經就遇到過一次。
登陸某個網站,開始顯示的 是本身的信息,等一段時間超時了,一刷新,竟然顯示了別人的信息。
Session是由應用服務器維持的一個服務器端的存儲空間,用戶在鏈接服務器時,會由服務器生成一個惟一的SessionID,用該SessionID 爲標識符來存取服務器端的Session存儲空間。而SessionID這一數據則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 SessionID提交到服務器端,來存取Session數據。這一過程,是不用開發人員干預的。因此一旦客戶端禁用Cookie,那麼Session也會失效。
二、cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙考慮到安全應當使用session。
三、session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE。
四、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。(Session對象沒有對存儲的數據量的限制,其中能夠保存更爲複雜的數據類型)
注意:
session很容易失效,用戶體驗不好;
雖然cookie不安全,可是能夠加密 ;
cookie也分爲永久 和暫時 存在的;
瀏覽器 有禁止cookie功能 ,但通常用戶都不會設置;
必定要設置失效時間,要否則瀏覽器關閉就消失了;
例如:
記住密碼功能就是使用永久cookie寫在客戶端電腦,下次登陸時,自動將cookie信息附加發送給服務端。
application是全局性信息,是全部用戶共享的信息,如能夠記錄有多少用戶如今登陸過本網站,並把該信息展現個全部用戶。
二者最大的區別在於生存週期,一個是IE啓動到IE關閉.(瀏覽器頁面一關 ,session就消失了)
一個是預先設置的生存週期,或永久的保存於本地的文件。(cookie)
此文爲轉載