当前位置: 首页 > news >正文

会话管理(session)

会话技术分类

  • 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("会话数据");

相关文章:

  • 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上
  • 分享一款本地音乐播放器源码
  • Swoft 源码剖析 - 代码自动更新机制
  • 深度学习(五)基于tensorflow实现简单卷积神经网络Lenet5
  • 移动端开发干货
  • Qcon 演讲纪实:详解如何在实时视频通话中实现AR功能
  • 大咖 | 卡耐基梅隆教授Tom Mitchell:人工智能在中国前景光明,有2点要注意
  • 注释那些事儿:前端代码质量系列文章(一)
  • 专访腾讯云沙开波:从无到有,打造全球领先调度系统
  • 巨杉数据库:金融级数据库未来方向
  • Python之md5.update才过的哪些坑
  • IIS7/7.5/8如何实现访问HTTP跳转到HTTPS访问
  • overflow问题--滚动设置?
  • Apache Curator操作zookeeper的API使用
  • AutoEx应用崩溃自动匹配Stack Overflow的解答
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Facebook AccountKit 接入的坑点
  • HTTP中的ETag在移动客户端的应用
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • javascript面向对象之创建对象
  • Java比较器对数组,集合排序
  • js学习笔记
  • Just for fun——迅速写完快速排序
  • Python语法速览与机器学习开发环境搭建
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • storm drpc实例
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Web设计流程优化:网页效果图设计新思路
  • 大快搜索数据爬虫技术实例安装教学篇
  • 记一次和乔布斯合作最难忘的经历
  • 前端存储 - localStorage
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 软件开发学习的5大技巧,你知道吗?
  • nb
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #if #elif #endif
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C)一些题4
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (学习日记)2024.01.19
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (转载)利用webkit抓取动态网页和链接
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net Core与存储过程(一)
  • .NET 指南:抽象化实现的基类
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • :not(:first-child)和:not(:last-child)的用法
  • @vue/cli脚手架
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [20190113]四校联考
  • [30期] 我的学习方法