JSP中cookie的使用方法(用户登入_客户端读取及发送):
一、向客户程序发送cookie
1、 创建cookie对象
Cookie c = new Cookie(“userId”,”landril”);
2、 设置最大时效
默认该cookie是存储在浏览器的内在中,用户关闭浏览器则被删除,下面的方法是将cookie存储在硬盘上。 c.setMaxAge(60*60*24); //一天,如果设置为0则是删除该cookie
3、向客户端添加Cookie
将cookie放入到HTTP响应报头,可以使用HttpServletResponse的addCookie方法,此方法不修改之前指定 的Set-Cookie头信息,而是创建新的头信息。
response.addCookie(c);
注意:设置cookie的步骤为创建cookie对象,设置最大时效,将cookie放入响应头信息,即发送到客户程序。
二、从客户端读取cookie
1、 获取Cookie数组
调用HttpServletRequest的getCookies得到一个Cookie对象的数组
2、 对数组进行循环,调用cookie的getName方法,获取具体的cookie的值
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0;i
if(“userId”.equals(c.getName())){
System.out.println(c.getValue());
}
}
}
三、使用Cookie记录访问数
1.用户第一次访问网页时的操作
...
out.println("你是第1 次登录该网页。在此之前没有相关Cookie信息。"); //打印登录信息
cookie=newCookie("accpCount", "1"); //Cookie对象,并设置名称与值
cookie.setMaxAge(60*60*24); //设置最长保留时间为1天
response.addCookie(cookie); //添加到响应头信息,返回到客户端
...
2.用户非第一次访问网页时的操作
...
Cookie[] cookies =request.getCookies(); //从request对象中获取客户端Cookie信息
int count = 0; //初始访问次数为0
Cookie cookie=null; //定义Cookie对象
if (cookies != null) { //判断request对象中是否存在Cookie信息
for (int i = 0; i
if("accpCount".equals(cookie.getName())) { //判断Cookie的名称是否为"accpCount"
count =Integer.parseInt(cookie.getValue())+1; //如果相等,加1
cookie.setValue(count+""); //重新设置Cookie对象的value值
cookie.setMaxAge(60*60*24); //设置保留最长时间
response.addCookie(cookie); //返回到客户端
out.println("你是第"+ count + "次登录该网页。");
break;
}
}
}
...
3.完整的使用Cookie对象获取客户Cookie数据,并通过Cookie名称取出相应的值,在页面上显示登录次数
...
public void doPost(HttpServletRequestrequest, HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html;charset=gb2312");
PrintWriter out =response.getWriter();
out .println("");
out.println("");
out.println(" ");
out.println(" ");
Cookie[] cookies =request.getCookies();
int count = 0;
boolean bool=true;
Cookie cookie=null;
if (cookies != null) {
for (int i = 0; i < cookies.length;i++) {
cookie = cookies[i];
if("accpCount".equals(cookie.getName())) {
count =Integer.parseInt(cookie.getValue())+1;
cookie.setValue(count+"");
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);
out.println("你是第"+ count + "次登录该网页。");
bool=false;
break;
}
}
}
if(bool){
out.println("你是第1 次登录该网页。在此之前没有相关Cookie信息。");
cookie=newCookie("accpCount", "1");
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);
}
out.println(" ");
out.println("");
out.flush();
out.close();
}
...
4.运行效果图
四、使用Cookie记录用户名和密码
一、用户登录操作
在用户填写登录数据后,提交表单进行登录验证,如果用户名和密码正确,则把用户名和密码保存在客户端。页面如图1所示。
图1 保存Cookie信息的登录页面
实现代码如下所示。
...
response.setContentType("text/html;charset=gbk");
//获取用户名
String userName = request.getParameter("username");
//获取用户密码
String password =request.getParameter("password");
//验证用户是否合法
if("accp".equals(userName) &&"accp".equals(password)) {
//如果合法,把用户名和密码保存在客户端Cookie中
//获取客户选择的Cookie保存时间
String cookieDate =request.getParameter("cookieDate");
int date = 0;
if (cookieDate != null&& cookieDate != "")
date =Integer.parseInt(cookieDate);
//创建用户名Cookie对象
Cookie cookieName =new Cookie("accpLoginName", userName);
//设置Cookie保存时间
cookieName.setMaxAge(date);
//添加到客户端
response.addCookie(cookieName);
//创建用户密码Cookie对象
Cookie cookiePass =new Cookie("accpLoginPass", password);
//设置保存Cookie时间
cookiePass.setMaxAge(date);
//添加到客户端
response.addCookie(cookiePass);
response.sendRedirect("success.jsp");
} else {
response.sendRedirect("fail.jsp");
}
...
二、用户再次登录时操作
服务器首先读取客户端Cookie信息,如果存在用户名和密码数据,则直接登录,否则显示登录页面。
实现代码如下所示。
response.setContentType("text/html;charset=gbk");
//用户名和密码是否存在以及合法的判断参数
boolean bool=false;
//获取客户端Cookie数组
Cookie[] cookies =request.getCookies();
//判断客户端是否存在Cookie对象
if (cookies != null) {
//预定义保存用户名和密码的变量
String userName ="";
String password ="";
//遍历Cookie数组
for (int i = 0; i
Cookie cookie= cookies[i];
//判断Cookie的名称是否等于"accpLoginName"
if("accpLoginName".equals(cookie.getName())) {
userName = cookie.getValue();
}
//判断Cookie的名称是否等于"accpLoginPass"
if("accpLoginPass".equals(cookie.getName())) {
password = cookie.getValue();
}
}
//判断用户名和密码是否合法
if("accp".equals(userName) &&"accp".equals(password))
bool=true;
}
//判断对客户端的Cookie的操作是否成功,成功则显示登录成功后的页面,
//否则,重定向到登录页面
if(bool)
response.sendRedirect("success.jsp");
else
response.sendRedirect("login.jsp");
js设置Cookie
//页面测试:
$(function(){//(暂时不区分多个用户的情况)
varparams = getParams();
varvcID = params['cID'];//代码ID
if(vcID)
{
varcd = new Date().getTime();
$.get("http://localhost:8088/sfbm/collect/visit.action",{"cID": vcID, t: cd});//记录visit
//varrID = getCookie("clct_vst_rID");//行为ID
varfDt = getCookie("clct_vst_fDt");//首次访问时间
if(fDt== undefined || fDt == null)
{
// setCookie("clct_vst_rID", cd,30);//行为ID
setCookie("clct_vst_fDt",cd, 30);//首次访问时间
setCookie("clct_vst_cID",vcID, 30);//访问的产品ID
}else{
//更新有效时间
// setCookie("clct_vst_rID", rID,30);//行为ID
setCookie("clct_vst_fDt",fDt, 30);//首次访问时间
setCookie("clct_vst_cID",vcID, 30);//访问的产品ID
}
}
functiongetParams()
{
varsc=document.getElementsByTagName('script');
var paramsArr=sc[sc.length-1].src.split('?')[1].split('&');
var args={}, argsStr=[], param, t, name,value;
for(var i=0, len=paramsArr.length;i param=paramsArr[i].split('='); name=param[0], value=param[1]; if(typeof args[name]=="undefined"){//参数尚不存在 args[name]=value; }else if(typeofargs[name]=="string"){ //参数已经存在则保存为数组 args[name]=[args[name]] args[name].push(value); }else{ //已经是数组的 args[name].push(value); } } return args; } //写cookies functionsetCookie(name, value, days) { if(days== undefined){ document.cookie= name + "=" + escape(value); }else{ varexp = new Date(); exp.setTime(exp.getTime()+ days*24*60*60*1000); document.cookie= name + "="+ escape(value) + ";expires=" +exp.toGMTString(); } } //读取cookies functiongetCookie(name) { var arr,reg=new RegExp("(^|)"+name+"=([^;]*)(;|$)"); if(arr = document.cookie.match(reg)) { returnunescape(arr[2]); } else { returnnull; } } }); 1:在客户端将用户的信息放入到Cookie中 String cookieName="Sender"; Cookie cookie=new Cookie(cookieName,"Test_Content"); // 创建一个Cookie对象 cookie.setMaxAge(10); response.addCookie(cookie); 2:从Cookie中取到用户的信息和sessionID // 得到sessionID StringsessionID = request.getSession(true).getId(); // 从session中得到 JSESSIONID System.out.println("sessionID --->"+sessionID); // 从cookie中得到JSESSIONID 值 Cookiecookies[] = request.getCookies(); if(cookies!=null){ for(inti=0;i Cookiecookie = cookies[i]; System.out.println(cookie.getName()+"--->"+cookie.getValue()); } }