目录
- 💂 个人主页: 爱吃豆的土豆
- 🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主
- 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
🏆人必有所执,方能有所成!
🐋希望大家多多支持😘一起进步呀!
1,会话技术-session【本阶段重点】
1.1:简述&入门&原理
Session:保存在服务器端的会话技术。
1,session是一个会话范围的域对象,负责进行信息的共享
session依赖cookie传递jsessionid(给大家画张图方便理解)
浏览器之所以能在服务器上保存数据,是因为浏览器默认情况下 和服务器上一个session对象打交道,保证浏览器访问同一个session,根据sessionid,sessionid保存在浏览器的cookie上。
-
/**
-
* session数据存放
-
*/
-
public
void
run1
(){
-
HttpSession
session
= getRequest().getSession();
-
session.setAttribute(
"msg",
"v1");
-
}
-
-
/**
-
* session数据获取
-
*/
-
public
void
run2
(){
-
HttpSession
session
= getRequest().getSession();
-
Object
msg
= session.getAttribute(
"msg");
-
System.out.println(msg);
-
}
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上)
-
public
void
run4
(){
-
//标记当前session需要被销毁
-
getRequest().getSession().invalidate();
-
}
1.3:常用API
-
public
void
run5
()
throws IOException {
-
PrintWriter
writer
= getResponse().getWriter();
-
HttpSession
session
= getSession();
-
writer.write(session.getId());
-
writer.write(
new
Date(session.getCreationTime()).toLocaleString());
-
writer.write(
new
Date(session.getLastAccessedTime()).toLocaleString());
-
//session.setMaxInactiveInterval();//30分钟 30*60
-
writer.write(session.isNew()+
"");
-
-
}
转载:https://blog.csdn.net/m0_64550837/article/details/125440551