当前位置:网站首页>Cookie&Session
Cookie&Session
2022-04-23 15:27:00 【離人歌】
一、前言
会话:一次会话中包含多次请求和响应。
一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止。
二、Cookie
2.1 概念
概念:客户端会话技术,将数据保存到客户端。
2.2 快速入门
2.2.1 使用步骤
① 创建Cookie对象,绑定数据
② 发送Cookie对象
③ 获取Cookie,拿到数据
代码如下:
// 创建Cookie对象
Cookie c = new Cookie("msg","haha");
// 发送Cookie
response.addCookie(c);
// 获取Cookie
Cookie[] cs = request.getCookies();
// 获取数据,遍历Cookies
if (cs != null) {
for (Cookie c : cs) {
String name = c.getName();
String value = c.getValue();
System.out.println(name+":"+value);
}
}
}
2.3 实现原理
基于响应头set-cookie和请求头cookie实现。
2.4 Cookie的细节
2.4.1 一次可不可以发送多个cookie?
可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。
2.4.2 cookie在浏览器中保存多长时间?
① 默认情况下,当浏览器关闭后,Cookie数据被销毁。
② 持久化存储:
setMaxAge(int seconds)
正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效。
负数:默认值。
零:删除cookie信息。
2.4.3 cookie能不能存中文?
在tomcat 8 之前 cookie中不能直接存储中文数据。(需要将中文数据转码---一般采用URL编码(%E3))。
在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析。
2.4.4 cookie共享问题
① 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?
默认情况下cookie不能共享,如果要共享,则可以将path设置为"/",setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录。
② 不同的tomcat服务器间cookie共享问题?
setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享。
比如: setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享。
2.5 Cookie的特点和作用
2.5.1 Cookie的特点
① cookie存储数据在客户端浏览器。
② . 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)。
2.5.2 Cookie的作用
① cookie一般用于存出少量的不太敏感的数据。
② 在不登录的情况下,完成服务器对客户端的身份识别。
三、Session
3.1 概念
概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。
3.2 快速入门
① 获取HttpSession对象:
HttpSession session = request.getSession();
② 使用HttpSession对象:
Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name)
3.3 原理
Session的实现是依赖于Cookie的。
原理图如下:
3.4 Session的细节
3.4.1 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
默认情况下,不是。如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
3.4.2 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
不是同一个,但是要确保数据不丢失,tomcat自动完成以下工作:
session的钝化:
在服务器正常关闭之前,将session对象系列化到硬盘上。
但tomcat不会完成活化。
session的活化:
在服务器启动后,将session文件转化为内存中的session对象即可。
3.4.3 session什么时候被销毁?
① 服务器关闭;
② session对象调用invalidate() ;
③ session默认失效时间 30分钟 :
选择性配置修改:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3.5 Session的特点
3.5.1 session的特点
① session用于存储一次会话的多次请求的数据,存在服务器端。
② session可以存储任意类型,任意大小的数据。
3.5.2 session与Cookie的区别(面试题):
① session存储数据在服务器端,Cookie在客户端
② session没有数据大小限制,Cookie有。
③ session数据安全,Cookie相对于不安全。
版权声明
本文为[離人歌]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_62443736/article/details/124323639
边栏推荐
- Byte interview programming question: the minimum number of K
- Five data types of redis
- Detailed explanation of kubernetes (XI) -- label and label selector
- T2 iCloud日历无法同步
- Async void caused the program to crash
- 软件性能测试报告起着什么作用?第三方测试报告如何收费?
- Detailed explanation of C language knowledge points - data types and variables [2] - integer variables and constants [1]
- Connectez PHP à MySQL via aodbc
- A series of problems about the best time to buy and sell stocks
- My raspberry PI zero 2W toss notes to record some problems and solutions
猜你喜欢
随机推荐
Machine learning - logistic regression
Nacos程序连接MySQL8.0+ NullPointerException
Compiling OpenSSL
通過 PDO ODBC 將 PHP 連接到 MySQL
The life cycle of key value in redis module programming
js——实现点击复制功能
Analysis of common storage types and FTP active and passive modes
函数(第一部分)
What are the mobile app software testing tools? Sharing of third-party software evaluation
API gateway / API gateway (III) - use of Kong - current limiting rate limiting (redis)
Node. JS ODBC connection PostgreSQL
T2 iCloud日历无法同步
Node.js ODBC连接PostgreSQL
GFS distributed file system (Theory)
Mysql database explanation (8)
Llvm - generate local variables
fatal error: torch/extension.h: No such file or directory
Kubernetes详解(十一)——标签与标签选择器
TLS / SSL protocol details (28) differences between TLS 1.0, TLS 1.1 and TLS 1.2
Baidu written test 2022.4.12 + programming topic: simple integer problem