Cookie的使用
一、cookie的作用
在我們平常寫的B/S程序中,會經常用到cookie,主要有以下一些作用:
1、 記錄用戶名和密碼
以及該用戶需要保存的一些信息,如購物購站,使用cookie,可以讓用戶自動登錄到站點等。
2、 定制站點
可以使用cookie來記錄用戶的偏好。
3、 定向廣告
可以使用cookie來記錄用記經常訪問的主題,并向他們顯示與這些主題相關的廣告。
二、向客戶程序發(fā)送cookie
1、 創(chuàng)建cookie對象
Cookie c = new Cookie(“userId”,”landril”);
2、 設置最大時效,默認該cookie是存儲在瀏覽器的內在中,用戶關閉瀏覽器則被刪除,下面的方法是將cookie存儲在硬盤上。
c.setMaxAge(60*60*24);//一天,如果設置為0則是刪除該cookie
3、 將cookie放入到HTTP響應報頭,可以使用HttpServletResponse的addCookie方法,此方法不修改之前指定的Set-Cookie報頭,而是創(chuàng)建新的報頭。
response.addCookie(c);
注意:設置cookie的步驟為創(chuàng)建cookie對象,設置最大時效,將cookie放入響應報頭,即發(fā)送到客戶程序,記住一定要將cookie發(fā)送到客戶程序
三、從客戶端讀取cookie
1、 調用HttpServletRequest的getCookies得到一個Cookie對象的數(shù)組
2、 對數(shù)組進行循環(huán),調用cookie的getName方法,獲取具體的cookie的值
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0;i<cookies.length;i++){
Cookie c = cookies[i];
if(“userId”.equals(c.getName())){
System.out.println(c.getValue());
}
}
}
四、cookie的常用方法
1、 setComment()/getComment():指定或查找與該cookie相關的注釋
2、 setDomain()/getDomain():設置或讀取該cookie適用的域
3、 setMaxAge()/getMaxAge():操作cookie保留的時間,多長時間后過期
4、 getName():讀取cookie的名稱
5、 setPath()/getPath():設置或取得cookie適用的路徑
cookie.setPath(“/”);指定服務器的所有頁面都應該收到該cookie
6、 setSource()/getSource():指定cookie是否只能通過加密連接(SSL)
默認false,表示cookie適用所有連接
7、 setValue()/getValue():指定或獲取cookie的值
五、使用cookie
1、RepeatServlet.java
public class RepeatServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
boolean newa = true;
Cookie[] cookies = request.getCookies();
if(cookies != null){
for (int i = 0; i < cookies.length; i++) {
Cookie c = cookies[i];
if ((c.getName().equals("repeat")) && (c.getValue().equals("true"))) {
newa = false;
break;
}
}
}
String title;
if (newa) {
Cookie rtn = new Cookie("repeat"," true");
rtn.setMaxAge(60*60*24*365);
response.addCookie(rtn);
title = "First Welcome";
} else {
title = "Welcom Back";
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body><h3>");
out.println(title);
out.println("</h3></body></html>");
}
public void doPose(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
2、CookieUtil.java
public class CookieUtil{
public static String getValue(HttpServletRequest request,String cName,String value){
Cookie[] cookies = request.getCookies();
if(cookies != null){
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cName.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return value;
}
public static Cookie getCookie(HttpServletRequest request,String cName){
Cookie[] cookies = request.getCookies();
if(cookies != null){
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cName.equals(cookie.getName())) {
return cookie;
}
}
}
return null;
}
}
3、AccessCountServle.java 記錄訪問數(shù)
public class AccessCountServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String acount = CookieUtil.getValue(request, "acc", "1");
int count = Integer.parseInt(acount);
Cookie cookie = new Cookie("acc",String.valueOf(count+1));
cookie.setMaxAge(60*60*24*365);
response.addCookie(cookie);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>Hello,the number is<h3>");
out.println(count);
out.println("</h3></body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}