Cookie & Session
2022/7/20 23:23:47
本文主要是介绍Cookie & Session,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
会话跟踪技术
-
会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开链接,会话结束,再一次会话中可以包含多次请求和响应
-
会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同意浏览器,一边在同一次会话的多次请求间共享数据
-
Http协议是无状态的,每次浏览器向服务器请求时,服务器都会视为新的请求,因此我们需要会话跟踪技术来实现会话内数据的共享。
-
实现方式: 1. 客户端会话跟踪技术:Cookie 2. 服务端会话跟踪技术:Session
Cookie的使用
-
客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
-
Cookie基本使用:
*发送Cookie
-
创建Cookie对象,设置数据
-
发送Cookie到客户端,使用response
String s = "张三"; String value = URLEncoder.encode(s, "UTF-8"); System.out.println(value); //创建cookie Cookie cookie = new Cookie("username" ,value); //发送cookie到客户端,然后使用response; //设置存活时间 cookie.setMaxAge(60*60*24*7); response.addCookie(cookie);
*获取Cookie
-
获取客户端所有的Cookie,使用request
-
遍历数据,获取每一个对象:for
-
使用Cookie对象方法获取数据
//获取客户端所有的Cookie对象 Cookie[] cookies = request.getCookies(); //遍历 for (Cookie c:cookies) { //getName()获取Key的值,getValue()获取value值 String name = c.getName(); if ("username".equals(name)) {//判断一下是否是我们要的cookie String s = c.getValue(); //中文解码 String value = URLDecoder.decode(s, "UTF-8"); System.out.println(name+","+value); break; } }
-
*Cookie原理
-
Cookie的实现是基于HTTP协议的
*响应头:set-cookie
*请求头:cookie
-
Cookie使用细节 (看上面代码)
-
Cookie存活时间
*默认,存储在浏览器的内存中,当关闭后,内存释放,Cookie被销毁
*setMaxAge(int seconds):设置Cookie存活时间
1. 正数:将cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除 2. • 负数:默认值,Cookie在当前浏览器的内存中,浏览器关闭,则会被销毁 3. • 零:删除对应的Cookie
-
*存储中文:
1.Cookie不能直接存储中文
2.需要进行URL编码
Session
-
服务端会话跟踪技术:将数据保存到服务端
-
JaveEE 提供HttpSession接口,实现一次会话的多次请求间数据共享
-
使用:
*获取session对象
*Session对象的功能
setAttribute()
getAttribute()
removerAttribute()
//创建session对象 HttpSession session = request.getSession(); //绑定数据到session域中 session.setAttribute("username","zs"); //创建session对象 HttpSession session = request.getSession(); //获取session域中的数据 Object username = session.getAttribute("username"); System.out.println(username);
-
Session 原理:是基于Cookie实现的,Session的唯一标识id
*Tomcat会帮session对象创建id,然后以Cookie的形式发送给浏览器,然会再次发送的时候会携带session的Id,服务器会根据id来共享唯一Session数据。
-
Session的使用细节
*Session钝化和活化
-
服务器重启,Session是否还存在?
*钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
* 活化:再次启动服务器,从文件中加载数据到Session中
-
-
Session 销毁
-
默认情况下,无操作,30分钟自动销毁
在web.xml 中配置
<!--session 存活时间--> <session-config> <session-timeout>30</session-timeout> </session-config>
-
-
调用Session对象的invalidate()方法,自己销毁。(例:退出登录需要将Session销毁)
小结
*Cookie 和 Session都是来完成一次会话内多次请求间的数据共享的
*区别:
1. 存储位置:Cookie数据存储在客户端,Session在服务器端 2. 安全性:Cookie不安全,Session安全 3. 数据大小:Cookie最大3KB,Session无大小限制 4. 存储时间:Cookie可以长期存储,Session默认30分钟,关闭服务器还是存在,但是关闭浏览器后,SessionId就销毁了,再次获取就不是同一个Session对象了。 5. 服务器性能:Cookie不占服务器资源,Session占用服务器资源
这篇关于Cookie & Session的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升
- 2024-05-08代码报错不用愁,CodeGeeX一键完成代码修复、错误解释的功能上线了!
- 2024-05-08今天开始程序员不用再发愁写commit message了,全部由CodeGeeX自动完成!