cookie

1.会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话。

2.问题:如何在一次会话中保存会话相关的数据。

3.Cookie:将会话相关的数据保存到浏览器中,并且在每次访问服务器时都带过去。
3.1javax.servlet.http.Cookie,可以直接利用此类的构造方法创建一个Cookie,创建出来的Cookie需要设置一个名称和值
3.2response身上具有addCookie的方法,可以将创建出来的组织成响应消息中的set-cookie头,通知浏览器保存该cookie
3.3request身上具有getCookies方法,可以获取浏览器带过来的所有Cookie

3.4Cookie方法:注意,浏览器是根据cookie的名称加上cookie的path来区分是否是同一个cookie的,如果需要覆盖之前的cookie,除了保证名称相同外还要保证path也相同。
public Cookie(String name,String value)利用构造方法创建一个Cookie对象,在创建的时候就要指定该Cookie的名和值
setValue与getValue方法 设置或者获取Cookie的值

setMaxAge与getMaxAge方法 如果不设置cookie的MaxAge(或将其值设置为负值),则默认情况下浏览器会将cookie保存在浏览器的内存中,会随着浏览器关闭而消失。如果设置为一个正值,则代表该Cookie要保存的以秒为单位的时间值,如此,该cookie将会被浏览器保存到硬盘中去。如果将MaxAge设置为0,则是通知浏览器去删除该Cookie。

setPath与getPath方法 用来指定访问哪个ULR及其子URL时带上此cookie,如果不设置此值,则浏览器默认会将发送该cookie的servlet所在的路径作为path使用。
例如:
setPath("/Day06")则/Day06/.../...的路径都会带上该Cookie
如果发送该Cookie的Servlet是 /Day06/servlet/Demo1Servlet,并且未设置setPat,则浏览器在访问/Day06/servlet/..时会带上该cookie
setDomain与getDomain方法 设置cookie对应的域名,此方法一旦调用,则浏览器会认为该cookie是一个第三方cookie而拒收
getName方法 获取该cookie的名字,注意没有setName方法,一个Cookie一旦创建出来就不能修改名字了

3.5浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

实验: 利用cookie实现显示上次访问时间
!~~利用cookie显示最近浏览的商品


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");

Cookie [] cs = request.getCookies();
Cookie findC = null;
if(cs!=null){
for(Cookie c : cs){
if("lastTime".equals(c.getName())){
findC = c;
}
}
}
if(findC == null){
response.getWriter().write("您是第一次访问本网站!");
}else{
Long lastTime = Long.parseLong(findC.getValue());
response.getWriter().write("您上次访问时间是:"+new Date(lastTime).toLocaleString());
}

Date date = new Date();
Cookie c = new Cookie("lastTime",date.getTime()+"");
c.setMaxAge(3600*24*30);
c.setPath(request.getContextPath());
//c.setDomain(".baidu.com");
response.addCookie(c);
}

原文地址:https://www.cnblogs.com/superPerfect/p/4300688.html