会话管理(session)

简介: 会话技术分类cookie技术会话数据保存在浏览器客户端session技术会话数据保存在服务端coolie技术技术核心cookie类(来自servlet):用于存储会话数据1.

会话技术分类

  • cookie技术

会话数据保存在浏览器客户端

  • session技术

会话数据保存在服务端

coolie技术

  • 技术核心

cookie类(来自servlet):用于存储会话数据
1.构造cookie对象:
Cookie(java.lang.String name ,java.lang.String value)
2.设置Cookie

void setPath(java.lang.String url)设置Cookie的有效访问路径

cookie.setPath(/绝对路径);

void setMaxAge(int expiry)设置Cooike的有效时间

正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间
负整数:表示cookie数据保存浏览器的内存中,浏览器关闭cookie就丢失
零:表示删除同名的cookie数据

void setValue(java.lang.String newValue)设置Cookie的值

3.发送Cookie到浏览器端保存
void response.addCookie(Cookie cookie);发送Cookie
4.服务器接受Cookie
Cookie request.getCookies();接受Cookie

  • 小节

cookie可以保存数据,但是cookie有条件限制,比如发送的内容只能是非中文的数据

sesion技术核心

HttpSession类:用于保存会话数据

  • 创建或者得到session对象
    HttpSession()
    HttpSesion(boolean create)
  • 设置session对象
    void setmaxInactiveInterval(int interval):设置session有效时间
    void invalidate():销毁session
    java.lang.String getId():得到session的编号
  • 保存会话的数据到session对象
    void setAttribute(java.lang.String , java.lang.Object value):保存数据
    java.lang.Object getAttribute(java.lang.String name):获取数据
    void removeAttribute(java.lang.String name):清除数据

session原理

问题:服务器能够识别不同的浏览者
前提:从那个session域对象保存数据,就必须从哪个域对象取出

  • 总结:
    代码解读:HttpSeeesion session = request.getSession();
    • 创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID
    • 把JSESSIONID作为Cookie的值发送给浏览器保存
    • 第二次访问的时候,浏览器带着JSESSSIONID的cookie访问服务器
    • 服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应的编号的session对象
    • 如果找到对应编号的session对象,直接返回该对象
    • 如果找不到对应的编号session对象,创建新的session对象,继续走1的流程
      结论:通过JSESSION的cookie值在服务器找session对象

session细节

  • java.lang.String getId():得到session的编号
  • 两个getSession方法

getSesstion(true)/getSession(): 创建或得到session对象。没有匹配的session编号,自动创建新的session对象
getSession(false):得到session对象。没有匹配的session编号,返回null

  • void setMaxInactivelnterval(int interval):设置session的有效时间

session对象的销毁时间:

  • 默认情况30分钟服务器自动回收
  • 修改回收的时间(过期时间)单位:秒

修改回收的时间
session.setMaxInactiveInterval(20);

  • 全局修改session有效时间

< !--修改session的有效时间:分钟-->

<session-config>
<session-timeout>1</session-timeout>
</session-config>
  • 手动去销毁session的对象

void invalidate() 手动销毁session对象

  • 如何避免浏览器的JSEEIONID的cookie随着浏览器关闭而丢失的问题
/**
*手动发送一个硬盘保存的cookie给浏览器
*/
Cookie c = new Cookie("JCOOKIEID",session.getId());
c.setMaxAge(60*60);  //保存一小时
response.addCookie(c);

总结

  • 会话管理:浏览器和服务器会话过程中的产生的会话数据管理
  • Cookie技术:new Cookie ("name","value")
    response.addCookie(cookie);
    request.getCookies()
  • Session 技术
    request.getSession();
    setAttribute("name","会话数据");
    getAttribute("会话数据");
相关文章
|
Web App开发 监控 Kubernetes
容器技术入门3:chaos混沌工程
参加冬季实战营第四期:零基础容器技术实战。参加学习一下,教程很好,做笔记记录一下。本文记录冬季实战营第四期:零基础容器技术实战动手实战-Chaos带你快速上手混沌工程。
1691 0
容器技术入门3:chaos混沌工程
|
2月前
|
存储 消息中间件 搜索推荐
京东零售基于Flink的推荐系统智能数据体系
摘要:本文整理自京东零售技术专家张颖老师,在 Flink Forward Asia 2024 生产实践(二)专场中的分享,介绍了基于Flink构建的推荐系统数据,以及Flink智能体系带来的智能服务功能。内容分为以下六个部分: 推荐系统架构 索引 样本 特征 可解释 指标 Tips:关注「公众号」回复 FFA 2024 查看会后资料~
222 1
京东零售基于Flink的推荐系统智能数据体系
|
10月前
|
缓存 自然语言处理 Java
详解FreeMarker Template:在Spring Boot中实现动态内容生成
详解FreeMarker Template:在Spring Boot中实现动态内容生成
1675 13
|
5月前
|
人工智能 自然语言处理 IDE
通义灵码:AI赋能编程,开启智能开发新时代
通义灵码是阿里云推出的一款专为开发者设计的智能编程助手,基于自主研发的大模型打造。它不仅具备代码生成、智能补全、代码优化和实时调试等功能,还通过垂直领域深度训练、多语言全栈支持以及与主流IDE无缝集成,大幅提升开发效率。真实案例显示,通义灵码可显著减少编码时间和错误率,助力开发者专注于业务逻辑。未来,它还将进一步理解业务需求、参与代码评审和跨团队协作,重新定义软件开发范式。立即体验,让AI赋能每一行代码!
417 8
|
7月前
|
SQL 存储 HIVE
鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目
本文整理自鹰角网络大数据开发工程师朱正军在Flink Forward Asia 2024上的分享,主要涵盖四个方面:鹰角数据平台架构、数据湖选型、湖仓一体建设及未来展望。文章详细介绍了鹰角如何构建基于Paimon的数据湖,解决了Hudi入湖的痛点,并通过Trino引擎和Ranger权限管理实现高效的数据查询与管控。此外,还探讨了湖仓一体平台的落地效果及未来技术发展方向,包括Trino与Paimon的集成增强、StarRocks的应用以及Paimon全面替换Hive的计划。
706 1
鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目
|
9月前
|
安全 Java 应用服务中间件
SpringBoot:CORS是什么?SpringBoot如何解决跨域问题?
CORS是Web开发中常见且重要的机制,SpringBoot通过提供注解、全局配置和过滤器等多种方式来解决跨域问题。选择适合的方式可以帮助开发者轻松处理跨域请求,提高应用的灵活性和安全性。
542 2
|
11月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
1758 5
|
Java API 开发工具
【Azure Developer】使用 Microsoft Authentication Libraries (MSAL) 如何来获取Token呢 (通过用户名和密码方式获取Access Token)
【Azure Developer】使用 Microsoft Authentication Libraries (MSAL) 如何来获取Token呢 (通过用户名和密码方式获取Access Token)
292 0
|
存储 人工智能 运维
数据湖建设实践:使用AWS S3与LakeFormation构建灵活数据存储
【4月更文挑战第8天】本文分享了使用AWS S3和LakeFormation构建数据湖的经验。选择S3作为数据湖存储,因其无限容量、高可用性和持久性,以及与多种系统的兼容性。LakeFormation则负责数据治理和权限管理,包括元数据管理、简化数据接入、细粒度权限控制和审计。通过这种方式,团队实现了敏捷开发、成本效益和数据安全。未来,数据湖将融合更多智能化元素,如AI和ML,以提升效能和体验。此实践为数据驱动决策和企业数字化转型提供了有力支持。
745 2
|
SQL 分布式计算 API
深入了解sparkSession
深入了解sparkSession
481 0