一、cookie的作用
在我们平常写的B/S程序中,会经常用到cookie,主要有以下一些作用:
1、记录用户名和密码
以及该用户需要保存的一些信息,如购物购站,使用cookie,可以让用户自动登录到站点等。
2、定制站点
可以使用cookie来记录用户的偏好。
3、定向广告
可以使用cookie来记录用记经常访问的主题,并向他们显示与这些主题相关的广告。
二、向客户程序发送cookie
1、创建cookie对象
Cookie c = new Cookie(“userId”,”landril”);
2、设置最大时效,默认该cookie是存储在浏览器的内在中,用户关闭浏览器则被删除,下面的方法是将cookie存储在硬盘上。
c.setMaxAge(60*60*24);//一天,如果设置为0则是删除该cookie
3、将cookie放入到HTTP响应报头,可以使用HttpServletResponse的addCookie方法,此方法不修改之前指定的Set-Cookie报头,而是创建新的报头。
response.addCookie(c);
注意:设置cookie的步骤为创建cookie对象,设置最大时效,将cookie放入响应报头,即发送到客户程序,记住一定要将cookie发送到客户程序
三、从客户端读取cookie
1、调用HttpServletRequest的getCookies得到一个Cookie对象的数组
2、对数组进行循环,调用cookie的getName方法,获取具体的cookie的值
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0;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
publicclassRepeatServletextendsHttpServlet {
publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
booleannewa=true;
Cookie[] cookies = request.getCookies();
if(cookies !=null){
for(inti = 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 =newCookie("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("
");
out.println(title);
out.println("");
}
publicvoiddoPose(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doGet(request,response);
}
}
2、CookieUtil.java
publicclassCookieUtil{
publicstaticString getValue(HttpServletRequest request,String cName,String value){
Cookie[] cookies = request.getCookies();
if(cookies !=null){
for(inti = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if(cName.equals(cookie.getName())) {
returncookie.getValue();
}
}
}
returnvalue;
}
publicstaticCookiegetCookie(HttpServletRequest request,String cName){
Cookie[] cookies = request.getCookies();
if(cookies !=null){
for(inti = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if(cName.equals(cookie.getName())) {
returncookie;
}
}
}
returnnull;
}
}
3、AccessCountServle.java记录访问数
publicclassAccessCountServletextendsHttpServlet {
publicvoiddoGet(HttpServletRequest request,HttpServletResponseresponse)
throwsServletException, IOException {
String acount = CookieUtil.getValue(request,"acc","1");
intcount = Integer.parseInt(acount);
Cookie cookie =newCookie("acc",String.valueOf(count+1));
cookie.setMaxAge(60*60*24*365);
response.addCookie(cookie);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello,the number is
");
out.println(count);
out.println("");
}
publicvoiddoPost(HttpServletRequest request,HttpServletResponseresponse)
throwsServletException, IOException {
doGet(request,response);
}
}
cookie的具体应用
if(checked){//当数据请求成功的时候如果checked的值为true则设置本机的cookie
var date =new Date();//获取当前时间
date.setDate(date.getDate()+30);//设置当前的日期为30天以后的日期
document.cookie ='user='+nameVal+";expires="+date.toGMTString();
document.cookie ='pwd='+encodeURI(pwdVal)+";expires="+date.toGMTString();
}
//读取cookie的函数
function getCookie(name){
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}
var cookie =document.cookie;
if(cookie){
$('.username').val(getCookie('user'));
$('.pwd').val(getCookie('pwd'));
}