轻松搞懂cookie与session
Java Web – cookie&session
文章目录
前言
我们来聊一聊Java Web中的常用技术,cookie和session,有些小伙伴可能对它们的理解不是很清楚,今天让我来帮大家梳理一下,轻松搞懂 cookie和session !
种一棵树最好的时间是10年前,其次就是现在,加油!
--by蜡笔小柯南
一、cookie是什么?
概念:
客户端会话技术,将数据保存到客户端,每次请求都会把对应的cookie发送到服务器端。
二、使用步骤
1.快速入门
代码如下(示例):
// 1.创建cookie对象
Cookie cookie = new Cookie(String name,String value);
// 2.发送cookie
response.addCookie(Cookie cookie);
// 3.获取cookie,得到数据
Cookie[] cookies = request.getCookies();
2.实现原理
基于响应头set-cookie和请求头cookie实现
3.cookie细节问题
1.一次可不可以发送多个cookie?
- 可以,创建多个cookie对象,多次调用response.addCookie()方法即可
2.cookie在浏览器中保存多长时间?
- 默认情况下,当浏览器关闭时,cookie就被销毁
- 手动设置cookie的存活时间,使用setMaxAge(int seconds)方法
- 正数:单位为秒,将cookie保存到硬盘上,进行持久化存储,设置保存的时间,时间过后,自动删除
- 零:删除cookie
- 负数:默认情况(即关闭浏览器,自动删除cookie)
3.cookie能不能存储中文?
- 在tomcat 8以前,不能直接存储中文,在tomcat 8之后,cookie支持中文数据
4.cookie的共享问题?
- 在同一个tomcat服务器中,部署了多个web项目,这些web项目之间cookie能否共享?
- 默认情况下,不能共享
- 可以使用 setPath(String path)方法,设置cookie的获取范围,默认情况下,设置当前的虚拟目录,如果要共享,设置为"/"
- 不同tomcat服务器之间cookie共享问题?
- setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
- 如:setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
4.cookie的特点和作用
1.cookie的特点
- cookie存储在客户端浏览器
- 浏览器对于cookie的大小有限制,单个cookie不能超过4kb,对同一个域名下总的cookie数量也有限制,不能超过20个
2.cookie的作用
- cookie用于存储少量的不太敏感的数据
- 在不登录的情况下,完成服务器对客户端的身份识别
三、session是什么?
概念:
服务器端会话技术,在一次会话的多次请求之间共享数据,将数据保存到服务器的对象中(session的实现是依赖于cookie的)
1.快速入门
代码如下(示例):
1. 获取HttpSession对象:
HttpSession session = request.getSession();
2. 使用HttpSession对象:
Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name)
2.session细节
1.在同一个会话中,不同的HTTP请求,可以获得同一个session对象,为什么?
- 通过cookie,在浏览器端写入一个JSESSIONID
2.服务器不关闭,浏览器关闭后,再次打开,两次获取到的session是否为同一个?
- 默认情况下,不是
- 如果需要相同,则要创建cookie,设置超时时间,键为JSESSIONID
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60);
response.addCookie();
3.浏览器不关闭,服务器关闭后重新打开,两次获取到的session是否为同一个?
- 不是同一个
- tomcat会自动完成以下动作,在tomcat关闭前,会执行session的钝化,将数据保存到硬盘上,在tomcat启动后,会执行session的活化,将session文件转化为内存中的session对象
3.session什么时候被销毁?
- 服务器关闭后
- 调用销毁的方法: session.invalidate();
- 设置失效时间,默认30分钟自动失效
<session-config>
<session-timeout>30</session-timeout>
</session-config>
4.session的特点
- session用于存储一次会话的多次请求的数据,保存在服务器端
- session可以存储任意类型,任意大小的数据
四、cookie与session的区别?
- session数据存在服务器端,cookie存在客户端
- session没有数据大小限制,cookie有
- session数据安全,cookie相对不安全
总结
到这里我们的cookie与session都已经介绍完了:
有没有豁然开朗的感觉呢,希望大家一键3连哈(4连也可以)。要想生活过得去,结尾总得带点绿~~~