前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >javaweb cookie基本操作 以及过期时间设置无效问题解决

javaweb cookie基本操作 以及过期时间设置无效问题解决

作者头像
kirin
发布于 2021-03-23 03:17:31
发布于 2021-03-23 03:17:31
2.5K0
举报
文章被收录于专栏:Kirin博客Kirin博客

关于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路径; ————————————————

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档