写点什么

Cookie & Session

  • 2022 年 5 月 01 日
  • 本文字数:1271 字

    阅读完需:约 4 分钟


????????持久化存储:setMaxAge(int seconds)



????????????????1. 正数:将 Cookie 数据写到硬盘的文件中,持久化存储。并指定 cookie 存活时间,时间到后,cookie 文件自动失效



????????????????2. 负数:默认值



????????????????3. 零:删除 cookie 信息


3. cookie 存中文



????????在 tomcat 8 之前,cookie 中不能直接存储中文数据



????????在 tomcat 8 之后,cookie 支持中文数据。特殊字符还是不支持,建议使用 URL 编码存储,URL 解码解析


4. cookie 共享范围



假设在一个 tomcat 服务器中,部署了多个 web 项目,那么在这些 web 项目中 cookie 能不能共享?? 默认情况下 cookie 不能共享



**setPath(String path):**设置 cookie 的获取范围



  • 默认情况下,设置当前的虚拟目录


  • 如果要共享,则可以将 path 设置为"/"



不同的 tomcat 服务器间 cookie 共享问题?



**setDomain(String path):**如果设置一级域名相同,那么多个服务器之间 cookie 可以共享



**例:**setDomain(".baidu.com"),那么 tieba.baidu.com 和 news.baidu.com 中 cookie 可以共享


特点:


  1. cookie 存储数据在客户端浏览器

  2. 浏览器对于单个 cookie 的大小有限制(4kb) 以及对同一个域名下的总 cookie 数量也有限制(20 个)


作用:


  1. cookie 一般用于存储少量的不太敏感的数据

  2. 在不登录的情况下,完成服务器对客户端的身份识别


Session




**概述:**服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。


快速入门:


**获取 HttpSession 对象:**HttpSession session = request.getSession();


使用 HttpSession 对象:


Object getAttribute(String name) ?


void setAttribute(String name, Object value)


void removeAttribute(String name)


<table border="1" cellpadding="1" cellspacing="1"><tbody><tr><td rowspan="2"><strong>实现原理</strong></td><td>Session 的实现是依赖于 Cookie 的</td></tr><tr><td style="text-align:center;"><img alt="" height="321" src="https://img-blog.csdnimg.cn/0f9a2bb9f891464c94dfc3258eaf01b2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAU291dGgucmV0dXJu,size_20,color_FFFFFF,t_70,g_se,x_16" width="698"></td></tr></tbody></table>


细节:


1. 当客户端关闭后,服务器不关闭,两次获取 session 不是同一个



如果需要相同,则可以创建 Cookie,键为 JSESSIONID,设置最大存活时间,让 cookie 持久化保存



?Cookie c = new Cookie("JSESSIONID",session.getId());


?c.setMaxAge(60*60);


?response.addCookie(c);


2. 客户端不关闭,服务器关闭后,两次获取的 session 不是同一个



要确保数据不丢失。tomcat 自动完成以下工作:在 IDEA 中并未完成,只在 tomcat 服务器中完成了



?**session 的钝化:**在服务器正常关闭之前,将 sessio 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 n 对象序列化到硬盘上



**session 的活化:**在服务器启动后,将 session 文件转化为内存中的 session 对象即可


3. session 什么时候被销毁?



1. 服务器关闭


2. session 对象调用 invalidate()


3. session 默认失效时间 30 分钟

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Cookie & Session_Java_爱好编程进阶_InfoQ写作社区