Cookie的使用方法

java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题。

一、cookie的作用

/**

建立一个无生命周期的cookie,即随着浏览器的关闭即消失的cookie,代码如下

在我们平常写的B/S程序中,会经常用到cookie,主要有以下一些作用:

* 测试Cookie的方法


1、记录用户名和密码

*/

HttpServletRequest request

以及该用户需要保存的一些信息,如购物购站,使用cookie,可以让用户自动登录到站点等。

@WebServlet(name = “CookieDemo”)

HttpServletResponse response

2、定制站点

public class CookieDemo extends HttpServlet {

Cookie cookie = new Cookie(cookiename,cookievalue);

可以使用cookie来记录用户的偏好。

    protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {

response.addCookie(cookie);

3、定向广告

        //1.创建Cookie对象


可以使用cookie来记录用记经常访问的主题,并向他们显示与这些主题相关的广告。

        Cookie cookie = new Cookie(“name”,”eric”);

下面建立一个有生命周期的cookie,可以设置他的生命周期

二、向客户程序发送cookie

        //2.设置Cookie参数


1、创建cookie对象

        //2.1.设置Cookie的有效路径

cookie = new Cookie(cookiename,cookievalue);

Cookie c = new Cookie(“userId”,”landril”);

        cookie.setPath(“/hello”);//默认就是web项目的地址

cookie.setMaxAge(3600);

2、设置最大时效,默认该cookie是存储在浏览器的内在中,用户关闭浏览器则被删除,下面的方法是将cookie存储在硬盘上。

        //2.2.设置Cookie的有效时间

//设置路径,这个路径即该工程下都可以访问该cookie
如果不设置路径,那么只有设置该cookie路径及其子路径可以访问

c.setMaxAge(60*60*24);//一天,如果设置为0则是删除该cookie

       
cookie.setMaxAge(20);//该cookie只存活20秒,从最后不调该cookie开始计算

cookie.setPath(/);

3、将cookie放入到HTTP响应报头,可以使用HttpServletResponse的addCookie方法,此方法不修改之前指定的Set-Cookie报头,而是创建新的报头。

       
cookie.setMaxAge(-1);//该cookie保存在浏览器内存中,关闭浏览器则销毁该cookie

response.addCookie(cookie);

response.addCookie(c);

        cookie.setMaxAge(0);//删除根该cookie同名的cookie


注意:设置cookie的步骤为创建cookie对象,设置最大时效,将cookie放入响应报头,即发送到客户程序,记住一定要将cookie发送到客户程序

        //3.把数据发送到浏览器

下面介绍如何读取cookie,读取cookie代码如下

三、从客户端读取cookie

        response.addCookie(cookie);


1、调用HttpServletRequest的getCookies得到一个Cookie对象的数组

        //4.服务端接收来自浏览器的cookie

Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组

2、对数组进行循环,调用cookie的getName方法,获取具体的cookie的值

        //方法1:

for(Cookie cookie : cookies){

Cookie[] cookies = request.getCookies();

//        String name = request.getHeader(“cookie”);

cookie.getName();// get the cookie name

if(cookies != null){

//        System.out.println(name);

cookie.getValue(); // get the cookie value

for(int i=0;i

        //方法2:

}

Cookie c = cookies[i];

        Cookie[] cookies = request.getCookies();


if(“userId”.equals(c.getName())){

        //注意:判断null,否则空指针

上面就是基本的读写cookie的操作。我们在实际中最好进行一下封装,比如增加一个cookie,我们关注的是cookie的name,value,生命周期,所以进行封装一个函数,当然还要传入一个response对象,addCookie()代码如下

System.out.println(c.getValue());

        if(cookies!=null){


}

            //遍历

/**

}

            for(Cookie c:cookies){

* 设置cookie

}

                String name = c.getName();

* @param response

四、cookie的常用方法

                String value = c.getValue();

* @param name cookie名字

1、setComment()/getComment():指定或查找与该cookie相关的注释

                System.out.println(name+”=”+value);

* @param value cookie值

2、setDomain()/getDomain():设置或读取该cookie适用的域

            }

* @param maxAge cookie生命周期 以秒为单位

3、setMaxAge()/getMaxAge():操作cookie保留的时间,多长时间后过期

        }else{

*/

4、getName():读取cookie的名称

            System.out.println(“没有接收cookie数据”);

public static void addCookie(HttpServletResponse response,String
name,String value,int maxAge){

5、setPath()/getPath():设置或取得cookie适用的路径

        }

Cookie cookie = new Cookie(name,value);

cookie.setPath(“/”);指定服务器的所有页面都应该收到该cookie

    }

cookie.setPath(/);

6、setSource()/getSource():指定cookie是否只能通过加密连接(SSL)

}

if(maxAge0) cookie.setMaxAge(maxAge);

默认false,表示cookie适用所有连接

response.addCookie(cookie);

7、setValue()/getValue():指定或获取cookie的值

}

五、使用cookie


1、RepeatServlet.java

读取cookie的时候,为了方便我们的操作,我们希望封装一个函数,只要我们提供cookie的name,我们便可以获取cookie的value,带着这个想法,很容易想到将cookie封装到Map里面,于是进行下面的封装

publicclassRepeatServletextendsHttpServlet {


publicvoiddoGet(HttpServletRequest request, HttpServletResponse
response)

/**

throwsServletException, IOException {

* 根据名字获取cookie

booleannewa=true;

* @param request

Cookie[] cookies = request.getCookies();

* @param name cookie名字

if(cookies !=null){

* @return

for(inti = 0; i < cookies.length; i++) {

*/

Cookie c = cookies[i];

public static Cookie getCookieByName(HttpServletRequest request,String
name){

if((c.getName().equals(“repeat”)) && (c.getValue().equals(“true”)))
{

MapString,Cookie cookieMap = ReadCookieMap(request);

newa=false;

if(cookieMap.containsKey(name)){

break;

Cookie cookie = (Cookie)cookieMap.get(name);

}

return cookie;

}

}else{

}

return null;

String title;

}

if(newa) {

}

Cookie rtn =newCookie(“repeat”,” true”);

/**

rtn.setMaxAge(60*60*24*365);

* 将cookie封装到Map里面

response.addCookie(rtn);

* @param request

title =”First Welcome”;

* @return

}else{

*/

title =”Welcom Back”;

private static MapString,Cookie ReadCookieMap(HttpServletRequest
request){

}

MapString,Cookie cookieMap = new HashMapString,Cookie();

response.setContentType(“text/html”);

Cookie[] cookies = request.getCookies();

PrintWriter out = response.getWriter();

if(null!=cookies){

out.println(“

for(Cookie cookie : cookies){

“);

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

cookieMap.put(cookie.getName(), cookie);

“);

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’));

}

}

}

return cookieMap;

}


发表评论

电子邮件地址不会被公开。 必填项已用*标注