1. 程式人生 > 實用技巧 >會話技術Cookie&Session,,,Cookie技術

會話技術Cookie&Session,,,Cookie技術

會話技術Cookie&Session

從開啟一個瀏覽器訪問某個站點,到關閉這個瀏覽器的整個過程,成為一次會話。會話技術就是記錄這次會話中客戶端的狀態與資料的。

會話技術分為Cookie和Session:

Cookie:資料儲存在客戶端本地,減少伺服器端的儲存的壓力,安全性不好,客戶端 可以清除cookie

Session:將資料儲存到伺服器端,安全性相對好,增加伺服器的壓力

一、Cookie技術

1.伺服器端向客戶端傳送一個Cookie

1)建立Cookie:

Cookie cookie = new Cookie(String cookieName,String cookieValue);

示例:

Cookie cookie = new Cookie("username","zhangsan");

那麼該cookie會以響應頭的形式傳送給客戶端:

注意:Cookie中不能儲存中文

2)設定Cookie在客戶端的持久化時間:

cookie.setMaxAge(int seconds); ---時間秒

注意:如果不設定持久化時間,cookie會儲存在瀏覽器的記憶體中,瀏覽器關閉 cookie資訊銷燬(會話級別的cookie),如果設定持久化時間,cookie資訊會 被持久化到瀏覽器的磁碟檔案裡

示例:

cookie.setMaxAge(10*60);

設定cookie資訊在瀏覽器的磁碟檔案中儲存的時間是10分鐘,過期瀏覽器 自動刪除該cookie資訊

3)設定Cookie的攜帶路徑:

cookie.setPath(String path);

注意:如果不設定攜帶路徑,那麼該cookie資訊會在訪問產生該cookie的 web資源所在的路徑都攜帶cookie資訊

示例:

cookie.setPath("/WEB16");

代表訪問WEB16應用中的任何資源都攜帶cookie

cookie.setPath("/WEB16/cookieServlet");

代表訪問WEB16中的cookieServlet時才攜帶cookie資訊

4)向客戶端傳送cookie:

response.addCookie(Cookie cookie);

5)刪除客戶端的cookie:

如果想刪除客戶端的已經儲存的cookie資訊,那麼就使用同名同路徑的持久化時 間為0的cookie進行覆蓋即可

//建立Cookie物件,不能用漢字
Cookie cook=new Cookie("name","zhangsan");
//設定Cookie持久化時間
cook.setMaxAge(2*60);//兩分鐘
//設定攜帶路徑
cook.setPath("/WEB05");//WEB05上的資源都可以訪問
//傳送Cookie物件
response.addCookie(cook);

/WEB05產生的cook物件
/WEB05/SendCookieServlet產生
/WEB05/index.jsp可以訪問
/WEB05/aaa/demo01.jsp可以訪問

/WEB05/aaa/SendCookieServlet產生
/WEB05/aaa/demo01.jsp 可以訪問
/WEB05/index.jsp 無法訪問

刪除Cookie物件(使用同名同路徑的持久化時 間為0的cookie進行覆蓋即可)

//建立Cookie物件
Cookie cook=new Cookie("name","zhangsan");
//設定路徑
cook.setPath("/WEB05");
//設定時間
cook.setMaxAge(0);
//傳送Cookie物件
response.addCookie(cook);

伺服器端怎麼接受客戶端攜帶的Cookie

cookie資訊是以請求頭的方式傳送到伺服器端的

1)通過request獲得所有的Cookie:

Cookie[] cookies = request.getCookies();

2)遍歷Cookie陣列,通過Cookie的名稱獲得我們想要的Cookie

for(Cookie cookie : cookies){

if(cookie.getName().equal(cookieName)){

String cookieValue = cookie.getValue();

}

}

//獲取Cookie所在的陣列
Cookie[] cook=request.getCookie();
//遍歷
for(Cookie c:cook){
if(c.getName().equals("name")){
String cookieValue=c.getValue();//Cookie陣列key值為name所對應的value值
}
}

使用者訪問第二次顯示上次訪問時間

//獲取當前時間
Date date=new Date();
//轉年月日格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//Date型別轉字串
String curr=sdf.formart(date);
//建立Cookie物件
Cookie cook=new Cookie("time",curr);//curr訪問時的時間
//設定初始化訪問時間
cook.setMaxAge(10*60);
//傳送Cookie物件
response.addCookie(cook);
//獲取Cookie所在陣列
Cookie[] cookie=request.getCookie();
//如果數組裡沒有值預設為null
String time=null;
if(cookie!=null){//判斷陣列內是否有值
for(Cookie cc:cookie){//遍歷陣列
if(cc.getName.equies("time")){
time=cc.getValue();//獲取Value值,就是上次的時間
}}}
//判斷是否是第一次登入
//解決亂碼
response.setContentType("text/html;charset=UTF-8");
if(time==null){
response.getWriter().writer("第一次訪問");
}else{
response。getWrite().write("上次訪問時間:"+time)
}