首页 > 编程语言 >【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了

时间:2022-10-19 21:32:55浏览次数:55  
标签:知识点 JavaWeb resp req Session Cookie cookie void

@[Toc]

1 会话

1.1 什么是会话?

用户打开浏览器,访问Web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。

1.2 会话跟踪

一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据

1.3 为什么要会话跟踪?

Http协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享。

1.4 如何实现会话跟踪

  1. 客户端会话技术:Cookie
  2. 服务端会话跟踪技术:Session

2 Cookie

2.1 Cookie的基本使用

2.1.1 发送Cookie

2.1.1.1 核心方法

方法名

方法类型

方法作用

addCookie(Cookie cookie)

void

向服务器发送Cookie

2.1.1.2 例子
@WebServlet("/demo01Cookie")
public class CookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* 1、设置Cookie */
Cookie cookie = new Cookie("username","zhangsan");

/* 2、发送Cookie */
resp.addCookie(cookie);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
2.1.1.3 效果

访问"demo01Cookie"

右键-检查-Application-Cookies 看到了手动发送的Cookie

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_session

2.1.2 获取Cookie

2.1.2.1 核心方法

方法名

方法类型

方法作用

getCookies

Cookie[]

获取所有的Cookie

getName

String

获取Cookie的名字

getValue

String

获取Cookie的值

2.1.2.2 例子
@WebServlet("/demo02Cookie")
public class CookieDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* 1、获取Cookies */
Cookie[] cookies = req.getCookies();
/* 2、遍历Cookies,获取自己想要的Cookie */
for (Cookie cookie : cookies) {
/* 3、获取cookie的名字 */
String name = cookie.getName();
if(name.equals("username"))
{
/* 4、获取cookie的值 */
String value = cookie.getValue();
System.out.println(name+":"+value);
}
}
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
2.1.2.3 效果

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_cookie_02

2.2 Cookie 的原理

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_cookie_03

Cookie是基于Http协议的,服务器第一次访问Servlet的时候,Servlet通过响应头set-Cookie将Cookie发送到浏览器,浏览器会自动cookie存放到Cookie

Servlet发送Cookie

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_session_04

浏览器存放Cookie

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_cookie_05

2.3 Cookie的细节

2.3.1 Cookie的生命周期

默认情况下,Cookie在浏览器关闭之后就会自动消失。

2.3.1.1设置Cookie的生命的周期

方法名

方法类型

方法作用

setMaxAge(int expiry)

void

设置Cookie的生命周期,单位是秒

其中expiry的值有三种情况:

  • 正数:将Cookie写入电脑的硬盘,持久化存储,到时间子哦对那个删除
  • 负数:默认
  • 零:删除对应的Cookie

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_session_06

2.3.2 Cookie存储中文

默认情况下,是不支持存储中文的,甚至会报错,这里采用的方法是对字符串先转码再解码的方式存储中文。

2.3.2.1 核心方法

方法名

方法类型

方法作用

URLEncoder.encode(String s, String enc)

String

对s进行转码

URLDecoder.decode(String s, String enc)

String

对s进行解码

2.3.2.2 例子

发送Cookie端

@WebServlet("/demo01Cookie")
public class CookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* 1、设置Cookie */
/*Cookie cookie = new Cookie("username","zhangsan");*/
/* 1.1 对字符串转码 */
String value = "张三";
value = URLEncoder.encode(value,"UTF-8");
/* 1.2 设置Cookie */
Cookie cookie = new Cookie("username",value);
System.out.println("value的值是:"+value);


/* 2、设置Cookie的生命周期(单位是s) */
/* 设置Cookie的生命周期是7天 */

cookie.setMaxAge(60*60*24*7);

/* 3、发送Cookie */
resp.addCookie(cookie);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}

接受Cookie端

@WebServlet("/demo02Cookie")
public class CookieDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* 1、获取Cookies */
Cookie[] cookies = req.getCookies();
/* 2、遍历Cookies,获取自己想要的Cookie */
for (Cookie cookie : cookies) {
/* 3、获取cookie的名字 */
String name = cookie.getName();
if(name.equals("username"))
{
/* 4、获取cookie的值 */
String value = cookie.getValue();
System.out.println("获取的值是:"+value);
/* 4.1 解码 */
value = URLDecoder.decode(value,"UTF-8");
System.out.println(name+":"+value);
}
}
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
2.3.2.3 效果

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_ide_07

3 Session

  • Session是服务端会话跟踪技术:将数据保存在服务端
  • JavaEE提供HttpSession接口,来实现依次会话的多次请求间数据共享的功能

3.1 Session的使用

3.1.1 核心方法

方法名

方法类型

方法左右

request.getSession()

HttpSession

获取Session的对象

setAttribute(String name, Object value)

void

设置Session的键值对

getAttribute(String name)

Object

根据name找到value

removeAttribute(String name)

void

根据name移除Session

3.1.2 例子

Session是不需要发送的,因为Session本身就存放在服务端

设置Session的一端

@WebServlet("/Session01Demo")
public class SessionDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* 1、获取Session对象 */
HttpSession session = req.getSession();
/* 2、设置Session对象 */
session.setAttribute("username","zhangsan");


}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}

获取Session的一段

@WebServlet("/Session02Demo")
public class SessionDemo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* 1、获取Session对象 */
HttpSession session = req.getSession();
/* 2、根据名字获取Session */
Object username = session.getAttribute("username");
session.removeAttribute("username");
System.out.println(username);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}

3.1.3 效果

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_ide_08

3.2 Session的原理

  • Session是基于Cookie实现的
  • Session有一个唯一的标识Id

服务器请求Servlet,Servlet会自动生成一个SessionID 并存在本地,并将这个id通过set-cookie:JSESSIONID发送到浏览器,浏览器存储在Cookies中,下一次浏览器访问Servlet的时候,会携带JSESSIONID,Servlet通过这个Id去本地文件查找session。

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_ide_09

3.3 Session 细节

3.3.1 Session钝化、活化

  • 钝化: 在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中。
  • **活化:**再次启动服务器,从文件中加载数据到Session中

3.3.2 Session的销毁

3.3.2.1 web.xml配置

默认情况下,如果你没有任何操作,Session会在30分钟后自动销毁。

<session-config>
<session-timeout>100</session-timeout>
</session-config>

【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了_cookie_10

3.3.2.2 Invalidate方法

调用session.invalidate()方法销毁Session

Session销毁有什么用吗?

*再次启动服务器,从文件中加载数据到Session中

3.3.2 Session的销毁

3.3.2.1 web.xml配置

默认情况下,如果你没有任何操作,Session会在30分钟后自动销毁。

<session-config>
<session-timeout>100</session-timeout>
</session-config>

[外链图片转存中...(img-DlOIMn8T-1663206985748)]

3.3.2.2 Invalidate方法

调用session.invalidate()方法销毁Session

Session销毁有什么用吗?

Session一般用在登录登出功能之上,Session的销毁可以便于完成登出的功能!

标签:知识点,JavaWeb,resp,req,Session,Cookie,cookie,void
From: https://blog.51cto.com/u_15807146/5768608

相关文章

  • 需要背诵的知识点
    可行性研究的分类:投资必要性、技术可行性、经济可行性、组织可行性、时间可行性、社会可行性资源平衡和资源平滑的区别:配置管理的六个活动:功能配置审计:物理配置审计:......
  • OAuth2知识点总结
    OAuth2是什么?OAuth2是一个授权协议。OAuth2.0框架能让第三方应用以有限的权限访问HTTP服务,可以通过构建资源拥有者与HTTP服务间的许可交互机制,让第三方应用代表资源拥有者......
  • jsp语法与jsp基本知识点
    【jsp基本知识点】JSP全称是JavaServerPages,它和servlet技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实......
  • JavaWeb对于C3P0链接池的CURD实例原理详解
    一.java对于C3P0链接池的详解1.1C3P0是什么?c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。1.2C3P0工作原理开源JDBC连接池......
  • session
           不想用cookie的话Token+Redis自己实现springboot使用redis  请求每次要带上token  如果是浏览器访问。可以将token放到请求头  ......
  • vue组件通信6种方式总结(常问知识点)
    前言在Vue组件库开发过程中,Vue组件之间的通信一直是一个重要的话题,虽然官方推出的Vuex状态管理方案可以很好的解决组件之间的通信问题,但是在组件库内部使用Vuex往往会......
  • 习惯用脚手架的你, 了解Webpack这些知识点吗?
    大概准备春招两个月了,也没找到坑位埋自己,来看看webpackwebpack官网:www.webpackjs.com对于前端的大兄弟来说,每天在前端摸爬滚打,各方征战,那对于webpack肯定再熟......
  • 云原生学习筑基 ~ 组网必备知识点 ~ DNS服务
    @目录​​一、为啥写这篇文章?​​​​二、DNS的作用​​​​三、域​​​​四、DNS工作原理​​​​五、搭建DNS服务器​​​​5.1、Bind​​​​5.2、系统环境准备​​​​......
  • 第二十章 CSP Session 管理 - 状态管理
    第二十章CSPSession管理-状态管理状态管理因为HTTP是无状态协议。为Web编写的应用程序必须使用特殊技术来管理应用程序上下文或状态。CSP提供了许多用于状态......
  • 登录(cookie,session)
    cookie和登录校验cookie:存储在浏览器的一段字符串,最大5kb,每个域都有一个cookie,跨域不共享,格式如k1=v1;k2=v2(可结构化)cookie会随http请求传递给服务端每次http请求,coo......