一 、会话技术
1.从浏览器打开,访问服务器开始,一直到访问服务器结束,浏览器关闭为止,这期间浏览器和服 务器之间产生的多次请求和响应加在一起,就称之为浏览器和服务器之间的一次会话。
2.Cookie:客户端的会话技术
Session:服务器端的会话技术
3.作用:在多次请求和响应之间可以实现数据的共享
二.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的名称相同的话,会被覆盖
2.cookie的value值可不可以存储中文
如果使用的是创建Cookie对象的方式,value值为中文是不会出现乱码问题的
如果使用的是原始方式设置cookie,value值为中文就会出现中文乱码
解决方案:对中文进行URL编码和URL解码
3.cookie的生命周期
cookie默认的生命周期:当浏览器关闭,缓存释放,cookie消失
4.延长cookie生命时长
设置cookie对象中的setMaxAge()方法,单位是秒,如果指定了秒值,那cookie就不会存储在浏 览器的缓存中,而是存储到了本地磁盘,但是时间一到,本地磁盘中的数据也会消失。
cookie.setMaxAge(60);
如果秒值设置为负数,就是cookie的默认生命周期
如果秒值设置为0,响应回浏览器之后,cookie立即消失
5.cookie的携带范围
默认情况下,如果我们没有设置cookie的携带范围,那携带范围就是当前的整个项目,访问 任何资源都会带有cookie请求头
6.自己设置去控制携带范围
设置cookie对象中的setPath()方法
//设置携带范围
//cookie.setPath("/day59");//默认设置
//cookie.setPath("/day59/servletDemo9");//访问具体的某一个资源才会携带
cookie
//cookie.setPath("/");//只要是当前服务器所部署的项目,访问里面所有的资源
都会携带cookie
三.Session
1.session是一个域对象:
session域对象的范围是一次会话的范围
setAttribute(String key, Object value)
getAttribute(String key)
removeAttribute(String key)
2.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);
3.关于session的问题
1.浏览器关闭,服务器没有关闭,
因为浏览器关闭,缓存消失,缓存中的JSESSIONID=id也就随之消失了,
当打开浏览器再次访问服务器中的资源的时候,是不会携带cookie的,
就获取不到session对象,只能重新创建新的session对象,响应的时候会携带set-cookie。
2.服务器关闭,浏览器不关闭
服务器的非正常关闭:
session对象就会从内存中消失
再一次开启开启服务器,通过浏览器访问服务器中的资源,虽然会携带cookie的请求 头,但是由于服务器
已经没有了session对象,会重新创建一个新的session对象,然后回设置响应头set- cookie:......
服务器的正常关闭:
session对象就会从内存中消失
但是在消失之前就会进行钝化(就是将session对象存储到了本地磁盘),
然后再一次开启服务器,会进行活化(激活,就是将sessio对象从本地磁盘还原到服务器 的内存中),
通过浏览器访问服务器中的资源,会携带cookie的请求头,然后服务器就匹配到了,就 能够获取到数据
3.session在什么情况下会销毁?
.服务器关闭
2.session自杀
session.invalidate();
3.设置session的存活时长
默认存活时长,30分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>