Cookie和Session使用步骤

1|0Cookie的基本使用

1|1发送Cookie

//1.创建Cookie对象,设置数据 Cookie cookie = new Cookie("key", "value"); //2.使用response对象,发送Cookie到客户端 response.addCookie(cookie);

1|2获取Cookie

//1.使用request对象获取客户端所携带的所有cookies Cookie[] cookies = request.getCookies(); //2.遍历Cookie对象数组,获取每一个Cookie对象,然后用Cookie对象的方法获取数据 for (Cookie cookie : cookies) { //获取键名 String name = cookie.getName(); //获取键值 String value = cookie.getValue(); }

1|3Cookie原理

Cookie是基于HTTP协议实现的,当从服务器端向客户端发送了一个Cookie对象时,Web服务器会将set-cookie:name=yang写入http协议的响应头中,而浏览器在解析http协议时发现了这一行代码,就会自动将Cookie值存在本地。而当浏览器向服务器发送请求时,会自动携带该域的所有Cookie数据,即将所有cookie数据写入http请求头中,格式是cookie:name=yang;orther=whatever

1|4Cookie细节

cookie的存活时间为直到浏览器关闭,因为cookie是存在浏览器的内存中,关闭浏览器内存会被释放。使用setMaxAge(int seconds)可以设置cookie的存活时间:

  • 设置为正数时,会将cookie写入硬盘持久化存储,到了设定时间就会被删除
  • 设置为负数时(默认),存入内存,随着浏览器关闭而释放。
  • 设置为零时,浏览器会删除该cookie

另外,cookie是不支持存储中文的,需要使用URL编码的方式:

//编成字节码就可以存入cookie String value = URLEncoder.encode("煤球", "UTF-8"); //获取cookie时就需要将字节码解码成中文 String value = cookie.getValue(); value = URLDecoder.decode(value, "UTF-8");

2|0Session基本使用

  1. 获取Session对象 HttpSession session = request.getSession();
  2. Session对象方法:
  • 存储数据到Session域中:void SetAttribute(String name, Object o);
  • 根据key获取值: Object getAttribute(String name);
  • 根据key删除该键值对: void removeAttribute(String name);

2|1存储Session

HttpSession session = request.getSession(); session.setAttribute("name", "yt");

2|2获取Session

HttpSession session = request.getSession(); Object name = session.getAttribute("name");

2|3Session原理

Session是基于Cookie实现的,创建一个新的Session对象时,Tomcat web服务器会自动发送一个Cookie,里面存放着对应这个Session对象的唯一标识符JSESSIONID,即在响应头中写入set-cookie:JSESSIONID=1245A5。而当浏览器发送请求时,会自动把cookie携带在请求头里:cookie:JSESSIONID=1245A5,然后web服务器在执行HttpSession session = request.getSession()时,会查找web服务器中存储的id是否有与cookie中对应的id,如果有则会取出对应的session数据,否则新创建一个。

2|4Session使用细节

  • Session钝化,指在服务器正常关闭后,Tomcat服务器会自动将Session数据写入硬盘的文件中
  • Session活化,指再次启动服务器后,服务器程序会自动从文件中加载数据到Session中
  • 所以,服务器的重启不会丢失Session数据
  • 该文件在关闭服务器是,tomcat会将其存入work目录中的SESSIONS.ser文件中,重启服务器并加载了数据后会将其删除。

Session在默认情况下,如果不进行任何操作,会在30分钟时自动销毁。Session也可以手动被销毁,即利用Session.invalidate()方法。


__EOF__

本文作者··十方··
本文链接https://www.cnblogs.com/flynn24/p/16061719.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ··十方··  阅读(318)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示