javaWeb中Cookie对象

1、什么是Cookie?

Cookie是一种会话技术,可以将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好的进行数据交互。(会话:客户端和服务器之间请求和响应的过程)

2、Cookie对象

类似于会员卡,卡内存储了用户的信息,如姓名,手机号等,客户第一次光临该商场的时候由商场给客户办理会员卡,之后每一次当该客户来到该商场也将根据会员卡上的信息计算优惠和累加积分。

Cookie也类似这种,当浏览器第一次访问服务器的时候,服务器会给客户端发送一些信息,例如用户信息和商品信息,这些信息都保存在Cookie中,,当浏览器再次访问服务器时,会在请求头中将Cookie发送给服务器,以便服务器对浏览器做出正确的响应。

Cookie在浏览器和服务器之间的传输过程图解

 服务器在向客户端发送Cookie时会在HTTP响应头中增加set-Cookie的响应头字段。set-cookie响应头字段中设置Cookie的具体示例如下:

Set-Cookie:username:itcast;Path=/;

 user表示Cookie名,Path表示Cookie的属性,Cookie以键值对的形式存在,Cookie属性可以有多个,属性之间用分号“;”和空格分隔

用户第一次访问服务器的时候,服务器会在响应消息中增加Set-Cookie字段,将用户的信息以Cookie的形式发送给浏览器。浏览器一旦接收服务器发送的Cookie信息就会将它保存在自身的缓冲区中。当浏览器后续继续访问服务器时,都会在请求信息中将用户信息以Cookie的形式发送给服务器,从而使服务器分辨出是哪一个用户发送的请求。

Cookie的特点

一个Cookie只能标识一种信息,以name:value的形式存储

一个Web站点可以给一个Web浏览器发送多个cookie,一个web浏览器也可以存储多个web站点提供的cookie

每个cookie的大小限制的4kb,浏览器一般允许存储300个cookie,每个站点大概就是20个cookie信息可以手动的清理

如果想在cookie中存储中文,必须使用URLEncoder类的encode()进行中文转码

同理获取cookie中到的中文信息时,使用URLDecoderl类的decode()进行解码

cookie.setMaxAge(0);删除cookie

 Cookie的构造方法

public Cookie(java.lang.String name,java.lang.String  value);

参数name用于指定Cookie的名称,value用于指定Cookie的值。需要注意的是,Cookie一旦创建,它的名称就不能再更改,Cookie的值可以为任何值,创建后允许被修改。

String getName();用于返回Cookie的名称

void setValue(String newValue);用于为Cookie设置一个新值

String  getValue()用于返回Cookie的值

void  setMaxAge(int expiry)用于设置Cookie在浏览器客户机上保持有效的秒数

package com.hnkj.Cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.DataInput;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;


public class Servlet01_CookieDemo extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out=response.getWriter();
        //获取所有cookie
        Cookie[] cookies=request.getCookies();
        //如果用户是第一次访问,得到的cookie是null
        if(cookies!=null) {
            //读取cookie中的内容.
            out.write("你上次访问的时间是:");
            for(int i=0;i<cookies.length;i++) {
                Cookie c=cookies[i];
                if(c.getName().equals("lastTime")) {
                    Long lastTime=Long.parseLong(c.getValue());
                    Date date=new Date(lastTime);
                    out.write(date.toLocaleString());
                }
            }
        }else {
            out.write("这是你第一次访问本站");
        }
        //创建cookie,存储用户的访问时间
        Cookie cookie=new Cookie("lastTime",System.currentTimeMillis()+"");
        //设置cookie的有效期
        cookie.setMaxAge(24*60*60);
        //将cookie添加到response对象中
        response.addCookie(cookie);


//            response.setContentType("text/html;charset=UTF-8");
//            PrintWriter out = response.getWriter();
//            //获取所有的Cookie
//             Cookie[] cookies = request.getCookies();
//             //如果用户是第一测访问,得到的cookie是null
//             if(cookies!=null){
//                 //读取cookie中的内容
//                 out.write("你上次访问的时间是:");
//                 for (int i = 0; i <cookies.length ; i++) {
//                     Cookie c=cookies[i];
//                     if("lastTIme".equals(c.getName())){
//                         Long CookieValue = Long.parseLong(c.getValue());
//                        Date date=new Date(CookieValue);
//                        out.write(date.toLocaleString());
//                     }
//                 }
//
//             }else{
//                 out.println("这是你的第一次访问本站");
//                 //创建cookies对象,存储用户访问时间
//                 Cookie cookie=new Cookie("lastTime",System.currentTimeMillis()+"");
//                 //设置cookie的有效期
//                 cookie.setMaxAge(24*60*60);
//                 //将cookie添加到response对象中
//                 response.addCookie(cookie);
//
//             }


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值