1. 程式人生 > >session和cookie區別&它們的用法

session和cookie區別&它們的用法

購物 執行 aaa 用戶數據 啟動 偽造 對象 fun val

(一)、區別
1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
考慮到安全應當使用session。
3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能
考慮到減輕服務器性能方面,應當使用COOKIE。
4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。

cookie 和session 的聯系:
session是通過cookie來工作的
session和cookie之間是通過$_COOKIE[‘PHPSESSID‘]來聯系的,通過$_COOKIE[‘PHPSESSID‘]可以知道session的id,從而獲取到其他的信息。
在購物網站中通常將用戶加入購物車的商品聯通session_id記錄到數據庫中,當用戶再次訪問是,通過sessionid就可以查找到用戶上次加入購物車的商品。因為sessionid是唯一的,記錄到數據庫中就可以根據這個查找了。
(二)、區別

1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上.

簡單的說,當你登錄一個網站的時候,如果web服務器端使用的是session,那麽所有的數據都保存在服務器上面,

客戶端每次請求服務器的時候會發送 當前會話的session_id,服務器根據當前session_id判斷相應的用戶數據標誌,以確定用戶是否登錄,或具有某種權限。

由於數據是存儲在服務器 上面,所以你不能偽造,但是如果你能夠獲取某個登錄用戶的session_id,用特殊的瀏覽器偽造該用戶的請求也是能夠成功的。

session_id是服務 器和客戶端鏈接時候隨機分配的,一般來說是不會有重復,但如果有大量的並發請求,也不是沒有重復的可能性,我曾經就遇到過一次。

登錄某個網站,開始顯示的 是自己的信息,等一段時間超時了,一刷新,居然顯示了別人的信息。


Session是由應用服務器維持的一個服務器端的存儲空間,用戶在連接服務器時,會由服務器生成一個唯一的SessionID,用該SessionID 為標識符來存取服務器端的Session存儲空間。而SessionID這一數據則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 SessionID提交到服務器端,來存取Session數據。這一過程,是不用開發人員幹預的。所以一旦客戶端禁用Cookie,那麽Session也會失效。


2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙考慮到安全應當使用session。


3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE。


4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。(Session對象沒有對存儲的數據量的限制,其中可以保存更為復雜的數據類型)

註意:

session很容易失效,用戶體驗很差;

雖然cookie不安全,但是可以加密 ;

cookie也分為永久 和暫時 存在的;

瀏覽器 有禁止cookie功能 ,但一般用戶都不會設置;

一定要設置失效時間,要不然瀏覽器關閉就消失了;

例如:

記住密碼功能就是使用永久cookie寫在客戶端電腦,下次登錄時,自動將cookie信息附加發送給服務端。

application是全局性信息,是所有用戶共享的信息,如可以記錄有多少用戶現在登錄過本網站,並把該信息展示個所有用戶。

兩者最大的區別在於生存周期,一個是IE啟動到IE關閉.(瀏覽器頁面一關 ,session就消失了)


一個是預先設置的生存周期,或永久的保存於本地的文件。(cookie)


一、cookie可以設置值和獲取值,刪除等一些其他功能
//設置cookie
function set(name,value,iDay){
if(iDay){
var oDate=new Date();//初始化時間
oDate.setDate(oDate.getDate()+iDay);//時間
document.cookie=name+‘=‘+value+‘;path=/;expires=‘+oDate;//用戶寫時間
}else{
document.cookie=name+‘=‘+value+‘;path=/;‘////如果用戶沒寫時間則執行這個
//時間可以不要,但路徑(path)必須要填寫,因為JS的默認路徑是當前頁,如果不填,此cookie只在當前頁面生效!
}
}
//獲取cookie
function get(name){
var arr=document.cookie.split("; ");
for (var i=0;i<arr.length;i++) {
var arr1=arr[i].split(‘=‘);
if(arr1[0]==name){
return arr1[1];
}
}
return ‘‘;
}
//刪除cookie
function remove(name){
set(name,‘aaaa‘,-1);
}
remove(‘jack‘);
alert(get(‘jack‘));
// set(‘jack‘,‘1234‘,5);

二、session

    設置session

      java裏面,可以給session添加自定義key,value(HttpServletRequest request 作為方法的輸入參數)

      HttpSession session = request.getSession();
      session.setAttribute("usrid", userid);

    取得session

      jsp裏面可以 這段來源自CSDN一個討論貼,自己時間後並沒有成功,報錯是session is undifiened,後來又找了資料說 javascript不提供訪問session的功  能。session只能通過動態程序操作,可以使用ajax給javascript返回值。

      session.getAttribute("username");

      java裏面可以 (HttpServletRequest request 作為方法的輸入參數)

      HttpSession session = request.getSession();

      session.getAttribute("usrname");

session和cookie區別&它們的用法