WEB核心【会话技术-session】第十六章

举报
爱吃豆的土豆 发表于 2022/09/25 02:50:20 2022/09/25
【摘要】 目录 💂 个人主页: 爱吃豆的土豆🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 🏆人必有所执,方能有所成! 🐋希望大家多多支持😘一起进步呀! 1,会话技术-session【本阶段重点】 1....

目录

  • 💂 个人主页: 爱吃豆的土豆
  • 🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
  • 🏆人必有所执,方能有所成!

  • 🐋希望大家多多支持😘一起进步呀!

1,会话技术-session【本阶段重点】

1.1:简述&入门&原理

1.2:声明周期

1.3:常用API


1,会话技术-session【本阶段重点】

1.1:简述&入门&原理

Session:保存在服务器端的会话技术。

1,session是一个会话范围的域对象,负责进行信息的共享

 session依赖cookie传递jsessionid(给大家画张图方便理解)

 浏览器之所以能在服务器上保存数据,是因为浏览器默认情况下 和服务器上一个session对象打交道,保证浏览器访问同一个session,根据sessionid,sessionid保存在浏览器的cookie上。


  
  1. /**
  2. * session数据存放
  3. */
  4. public void run1(){
  5. HttpSession session = getRequest().getSession();
  6. session.setAttribute("msg","v1");
  7. }
  8. /**
  9. * session数据获取
  10. */
  11. public void run2(){
  12. HttpSession session = getRequest().getSession();
  13. Object msg = session.getAttribute("msg");
  14. System.out.println(msg);
  15. }

 

getSession();

如何保证浏览器可以访问同一个session:

getSession时,会先判断请求头上存在jsessionid,如果存在jsessionid,再判断内存中session对象id 是否和 jsessionid相符,发现有jsessionid相符的,将id相同的session对象进行返回。

注意:若请求头jsessionid不存在、或者jsessionid和内存中session的id不匹配,都会导致重新创建一个session对象,给浏览器重新写一个jsessionid的cookie

若浏览器禁用cookie,session能用么?

Session不能使用,因为jsessionid无法传递,使得每次浏览器访问的session对象都是新对象。

getSession()写cookie原理:

浏览器第一次访问session对象 或者 浏览器带有的jsessionid不对,服务器会创建新的session对象给浏览器使用,给创建新的jsessionid的cookie。

BaseServlet和JSP中 自有jsessionid的原因:

BaseServlet的service方法源码中,有调用getSession()

 

 

1.2:声明周期

正常关闭的服务器,session数据未销毁:

正常情况下,服务器启动时,序列化文件会加载回去。(idea每次启动都会清空临时目录,将来项目只部署tomcat上)

 


  
  1. public void run4(){
  2. //标记当前session需要被销毁
  3. getRequest().getSession().invalidate();
  4. }

 

1.3:常用API

 


  
  1. public void run5() throws IOException {
  2. PrintWriter writer = getResponse().getWriter();
  3. HttpSession session = getSession();
  4. writer.write(session.getId());
  5. writer.write(new Date(session.getCreationTime()).toLocaleString());
  6. writer.write(new Date(session.getLastAccessedTime()).toLocaleString());
  7. //session.setMaxInactiveInterval();//30分钟 30*60
  8. writer.write(session.isNew()+"");
  9. }

文章来源: qianxu.blog.csdn.net,作者:爱吃豆的土豆,版权归原作者所有,如需转载,请联系作者。

原文链接:qianxu.blog.csdn.net/article/details/125440551

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。