关于cookie设置过期无效的问题: 经过cookie.getMaxAge()获取的值,显示出来永远是-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”); * response.addCoolie( theCookie ); * 2.解析HTTP请求中的Cookie数据。 * Cookie cookies[] = response.getCookies(); * for( int i=0; i<cookies.length; i++ ){ * out.println(“Cookie key: “+cookie[i].getName() ); * out.println(“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被覆盖,保存方式以及过期时间也被覆盖; * */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
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<cookies.length; 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()+”/”); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 Domain, Path的设置 cookie读取与设置的基本原理: 1. 先匹配 响应头中的设置的 domain, 一般就是域名 2. 在匹配 path,默认为 “/应用名字/”
1) 同一个tomcat下多个webapp共享cookie: 此时:默认的Domain是一样的,所以不需要设置; path不一样,那么就强制设置为同一个path即可,那么久都能访问到指定的Cookie了。 2)不同服务器下的webapp共享cookie: 则强制指定domin路径; ————————————————
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有