关于cookie设置过期无效的问题:
经过()获取的值,显示出来永远是-1. 但实际的值并不是-1; 可以通过关闭浏览器测试,cookie还在; 或者设置cookie时间为10,等10秒时间之后,cookie会被删除;
并不是网上说的要设置 path, domin; 你只要知道:你设置的是对的,不过除了key-value,其余的参数都不可读就行;
cookie的基础知识
/**
* cookie 是服务器 存储数据到 浏览器 的一种技术,用于跟踪客户状态。比如证明客户身份: 是否是第一次访问,是否已经登录等
*
* cookie流程:
* 1.客户端首次访问服务器,服务端会现在客户端存留该客户的相关信息的cookie;
* 2.以后客户每次访问服务器时,都会在HTTP请求中包含cookie数据,服务器解析cookie,就能得到客户的信息;
*
* cookie操作:
* 服务器
* 1.在HTTP响应结果中添加Cookie数据。
* Cookie theCookie = new Cookie("username","Tom");
* ( theCookie );
* 2.解析HTTP请求中的Cookie数据。
* Cookie cookies[] = ();
* for( int i=0; i<; i++ ){
* ("Cookie key: "+cookie[i].getName() );
* ("Cookie value: "+cookie[i].getValue() );
* }
*
* 浏览器(自动操作)
* 1.如果响应体中携带cookies,那么解析HTTP响应结果中的Cookie数据,并存到本地磁盘。
* 2.如果本地磁盘中存有cookies,将cookie中保存的数据全部读取并添加到HTTP请求中。
*
* cookie有效期设置
* Servlet可以通过Cookie类的getMaxAge()方法获取Cookie的有效期;
* Servlet可以通过设置Cookie类的setMaxAge( int expiry );
*
* //expiry默认值为 -1;
* 1.如果expiry大于0,则保存有效期为expire时间长度,单位毫秒;
* 2.如果expiry等于0,则指示浏览器删除当前cookie;
* 3.如果expiry小于0,则指示浏览器不保存该cookie到硬盘,就保存在内存中,浏览器关闭就消失;
*
* 关于Cookie是否是同一条判断标准
* 可以理解为: 如果存在同一个key,那么后一条覆盖前一条; value被覆盖,保存方式以及过期时间也被覆盖;
* */
cookie案例代码
代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//获取HTTP请求中的所有cookies
Cookie cookies[] = request.getCookies();
if( cookies == null ) {
out.println("首次访问,没有cookie");
}else {
for( int i=0; i<; i++ ) {
Cookie cookie = cookies[i];
out.println( "<br>Cookie name:"+cookie.getName() );
out.println( "<br>Cookie value:"+cookie.getValue() );
out.println( "<br>Max Age: "+cookie.getMaxAge()+"<br>" );
//修改cookie
if( cookie.getValue().equals("cookieValue2") ) {
cookie.setValue("cookieValue-1");
}
//删除cookie
if( cookie.getValue().equals("cookieValue4") ) {
//cookie.setPath("/");//设置成跟写入cookies一样的
cookie.setMaxAge(0);
}
//cookie.setMaxAge();
//cookie.setPath(request.getContextPath());
//response.addCookie(cookie);
}
out.println("第"+count+"访问");
}
//向浏览器端编写一个cookie
Cookie cookie = new Cookie( "cookieName"+count,"cookieValue"+count );
//cookie.setPath(request.getContextPath());
cookie.setMaxAge(10);
response.addCookie(cookie);
count++;
out.println(count);
//out.println(request.getContextPath()+"/");
}
Domain, Path的设置
cookie读取与设置的基本原理:
1. 先匹配 响应头中的设置的 domain, 一般就是域名
2. 在匹配 path,默认为 “/应用名字/”
1) 同一个tomcat下多个webapp共享cookie:
此时:默认的Domain是一样的,所以不需要设置; path不一样,那么就强制设置为同一个path即可,那么久都能访问到指定的Cookie了。
2)不同服务器下的webapp共享cookie:
则强制指定domin路径;
—————– 已完成,暂无更新 ———————