1.会话
浏览器和服务器的多次请求就是一次会话;
注意:浏览器和服务器在会话的过程中会产生状态信息;
2.http协议
http协议是一个无状态的协议;
一段时间内,web服务器会同时接到多个浏览器的请求访问,怎样区别服务器哪些请求是来自同一个浏览器的请求? 这需要浏览器哪些请求进行标识,属于同一个会话附加相同的标识Id,这样不同的会话请求有不同的标识Id,这个Id叫会话Id;
3.会话跟踪技术
要实现有状态就必须在浏览器和服务器之间多次进行sessionID的传递,实施多次传递的技术就是会话跟踪技术;
提示:会话跟踪技术实现有两种方式:
(1)通过cookie技术在请求头中传递sessionID;
(2)通过url重写技术,就是在url的末尾添加会话ID;
4.cookie
定义:是浏览器访问web服务器的某个资源的时候,由web服务器在http响应头中附带传递浏览器的一段数据;
5.web服务器在响应头中添加了如下字段
响应头:set-cookie:cookie,名称=值;属性名=值,属性名=值;
cookie的名称的字符串只能是英文,value值是字符串;
6.流程图
浏览器(以后请求第一步:到临时文件夹去拿cookie数据);
服务器(如果服务器根据需要向浏览器写cookie,那么是通过响应头以set-cookie:key=值的方式写浏览器的缓存文件夹的某个文件中);
浏览器的临时文件夹(对一个设置保存到这个文件);
7.验证cookie的历程;
如何在服务器端写cookie到浏览器
解答:(1)步骤
<1>创建cookie对象
<2>设置cookie的相关属性
<3>通过response写入
(2)创建一个servlet的文件,在doGet中:
request.setCharcterEnCoding("UTF-8");
request.setContextType("text/html;charset=UTF-8");
//创建cookie
Cookie c = new Cookie("username","zhangsan");
//设置属性
c.setMaxAge(20);
//发送cookie
response.addCookie(c);
//跳转到测试页面,转发
response.senRedirect("text.jsp");
8.cookie 的类型
(1)持久cookie
cookie.setMaxAge(20);如果关闭浏览器,在20秒中还是可以拿到cookie,代表20秒后会过期;
(2)会话级cookie
cookie.setMaxAge(负数);或者不写这个代码;
9.cookie的归还
问题:是不是每次请求的时候浏览器都会把上次服务器写到浏览器的cookie带到服务器?
答案:是有条件的,并不是每次都会带过去的;
cookie的归还条件:它只会去访问写入cookie的目录和子目录有效;
10.session
(1)session的原理
当浏览器向服务器发送请求,根据业务需求,如果服务器端使用session,会在服务器端创建session对象,每个session有一个编码号就是sessionID,响应的时候会把sessionID以JSESSIONID为key,yisessionID为value,保存到一个cookie中,发送到浏览器,这个发送是服务器处理的,不需要用户进行编码,下次浏览器访问的时候,会把cookie带入服务器;
(2)禁用cookie后,如何处理请求
a.禁用是指浏览器的缓存文件禁止写入cookie,但是并不能阻止服务器端写cookie,只是写的不能存在浏览器中;
b.采用url重写可以完成session中储存的数据获得,
步骤:把url用方法进行包装
<1>对于a连接或者form表单action=url采用如下方式;
url=response.encondeURL(url),这种写法建议在<a href=url></a>连接时候用;
<2>如果使用response重定向就是用
String url =response.encodingRedirectURL("/ch123/test.jsp");
response.sendRedirect(url);
(3)钝化与活化
当服务器停止的时候,会把存储到session中的对象序列化到session.ser文件,保存到Tomcat的绝对路径下面,这个过程叫钝化,但服务器启动的时候,重新把序列化的对象保存到session,同时session.ser消失的过程叫活化;