session和cookie區別&它們的用法
(一)、區別
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區別&它們的用法