1.会话技术
有哪些会话技术?
cookie:客户端的会话技术
session:服务器端的会话技术
什么是会话?
就是你与我之间的对话
一次会话,一次对话,在一次对话中,会聊很多句
在一次会话中,会有多次请求和多次响应
当其中一方断开的时候,会话结束
会话有什么用?
在多次请求和响应之间可以实现数据的共享
2.Cookie
客户端的会话技术
cookie的入门小案例?
ServletDemo1:
//方式一(原始写法):
response.setHeader("set-cookie", "name=jerry");
//方式二:
//创建cookie对象
Cookie cookie = new Cookie("name", "tom");
//添加cookie,设置cookie的响应信息
response.addCookie(cookie);
ServletDemo2:
//获取cookie
Cookie[] cookies = request.getCookies();
System.out.println(cookies);
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name + "..." + value);
}
关于cookie的几个小问题?
1.cookie能不能写多个
可以携带多个cookie
如果多个cookie的名称相同的话,会怎么样呢?
会被覆盖
2.cookie的value值可不可以存储中文
如果使用的是创建Cookie对象的方式,value值为中文是不会出现乱码问题的
如果使用的是原始方式设置cookie,value值为中文就会出现中文乱码
如何解决呢?
对中文进行URL编码和URL解码
3.cookie的生命周期
cookie默认的生命周期:当浏览器关闭,缓存释放,cookie消失
怎么样能够让即使浏览器关了,cookie也不消失呢(延长cookie生命时长)?
设置cookie对象中的setMaxAge()方法,单位是秒,如果指定了秒值,那cookie就不会存储在浏览器的缓存中,
cookie.setMaxAge(60);
而是存储到了本地磁盘,但是时间一到,本地磁盘中的数据也会消失。
如果秒值设置为负数,就是cookie的默认生命周期
如果秒值设置为0,响应回浏览器之后,cookie立即消失
4.cookie的携带范围
默认情况下,如果我们没有设置cookie的携带范围,那携带范围就是当前的整个项目,访问任何资源都会带有cookie请求头
我们能不能通过自己设置去控制携带范围?
可以
设置cookie对象中的setPath()方法
//设置携带范围
//cookie.setPath("/day59");//默认设置
//cookie.setPath("/day59/servletDemo9");//访问具体的某一个资源才会携带cookie
//cookie.setPath("/");//只要是当前服务器所部署的项目,访问里面所有的资源都会携带cookie
3.Session
服务器端的会话技术
session是一个域对象:
session域对象的范围是一次会话的范围
setAttribute(String key, Object value)
getAttribute(String key)
removeAttribute(String key)
session的入门小案例?
ServletDemo01:
//获取session对象
HttpSession session = request.getSession();
//向session域中存储数据
session.setAttribute("name", "tom");
ServletDemo02:
//获取session对象
HttpSession session = request.getSession();
//从session域中获取数据
Object value = session.getAttribute("name");
System.out.println(value);
关于session的几个小问题?
1.如果浏览器关闭,服务器没有关闭,会有什么情况发生呢?
因为浏览器关闭,缓存消失,缓存中的JSESSIONID=id也就随之消失了,
当打开浏览器再次访问服务器中的资源的时候,是不会携带cookie的,
就获取不到session对象,只能重新创建新的session对象,响应的时候会携带set-cookie。
如果希望下次浏览器访问同一个资源,依然会携带cookie:JSESSIONID=ID的话,该怎么办?
//手动创建cookie,并且将底层自己创建的cookie给覆盖掉
Cookie cookie = new Cookie("JSESSIONID", session.getId());
//设置生存时长
cookie.setMaxAge(60);
//响应回去
response.addCookie(cookie);
2.如果服务器关闭,浏览器不关闭,会有什么情况发生呢?
服务器的非正常关闭:
session对象就会从内存中消失
再一次开启开启服务器,通过浏览器访问服务器中的资源,虽然会携带cookie的请求头,但是由于服务器
已经没有了session对象,会重新创建一个新的session对象,然后回设置响应头set-cookie:......
服务器的正常关闭:
session对象就会从内存中消失
但是在消失之前就会进行钝化(就是将session对象存储到了本地磁盘),
然后再一次开启服务器,会进行活化(激活,就是将sessio对象从本地磁盘还原到服务器的内存中),
通过浏览器访问服务器中的资源,会携带cookie的请求头,然后服务器就匹配到了,就能够获取到数据
序列化操作?
将对象以流的形式存储到本地磁盘
反序列化操作?
将本地磁盘中的数据还原成内存中的对象
3.session在什么情况下会销毁?
1.服务器关闭
2.session自杀
session.invalidate();
3.设置session的存活时长
默认存活时长,30分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
会话技术理解
最新推荐文章于 2023-11-27 20:32:54 发布