配色: 字号:
Cookie工作原理
2017-12-07 | 阅:  转:  |  分享 
  
会话技术会话技术概述什么是会话为了实现某一个功能(购物),浏览器和服务器之间可能会产生多次的请求和响应.从打开浏览器访问服务器开始,到
访问服务器结束关闭浏览器为止,这期间产生的多次请求和响应加在一起就称之为是浏览器和服务器之间的一次会话!会话中的数据存储问题在一
次会话中往往会产生一些数据,而这些数据是需要保存起来的,如何在一次会话中保存所产生的数据呢?如果需要保存会话中产生的数据,可
以考虑我们之前学习过的request域和ServletContext域:(1)如果使用request作用域来保存会话中产生的数据,
由于会话是多次请求,多次响应,而request域的作用范围仅仅是一次请求,所以用request域保存会话中产生的数据,作
用范围太小了!(2)如果使用ServletContext作用域来保存会话中产生的数据,ServletContext的作用范围是整
个WEB应用,如果将每一个客户端和服务器产生的会话数据都保存在ServletContext域中,很可能会发生混乱.Cookie
Cookie的工作原理Cookie是通过Set-Cookie响应头和Cookie请求头将会话中产生的数据保存在客户端,是客户端的
技术.客户端向服务器发送请求,服务器获取需要保存的数据,并将需要保存的数据通过Set-Cookie响应头发送给浏览器,浏览
器会以Cookie的形式保存在浏览器的内部.当客户端再次发送请求访问服务器,服务器可以通过Cookie请求头获取上次发送给浏览器
的Cookie信息,通过这种方式可以保存会话中产生的数据.由于Cookie技术是将会话中产生的数据保存在客户端,每个客户端各自
持有自己的数据,当需要时再带给服务器,因此不会发生混乱!如何创建CookieSUN公司为了简化Cookie的操作,提供了一套
关于Cookie的API:Cookiecookie=newCookie(Stringname,Stringvalu
e);cookie.getName();//获取Cookie的名字cookie.getValue();//获取Cookie的值co
okie.setValue(Stringvalue);//设置Cookie的值如何将Cookie添加到响应中response.a
ddCookie(Cookiecookie);//将Cookie对象添加到response响应中,可以多次调用该方法,将多个
Cookie添加到响应中.如何获取请求中的Cookierequest.getCookies();//该方法会返回请求中所有的Coo
kie对象组成的数组,如果请求中没有任何Cookie信息,则返回null.如何删除Cookie我们可以间接删除Cookie:可
以向浏览器再发一个同名、同path、同domain(如果前后都不设置,则domain默认是相同的)的Cookie,由于浏览器是根
据Cookie的名字+path+domain来区分一个Cookie的,如果两个Cookie的名字+path+domain完全一致,
则浏览器会认为是同一个Cookie,这时后发的Cookie会覆盖之前发送的Cookie,而后发的Cookie只要设置setMaxA
ge方法值为0,浏览器收到之后也会将后发的Cookie立即删除.假设之前发送的Cookie名字为:time,path为:req
uest.getContextPath()+”/”,domain都不设置默认一样,存活时间为:30天,如果想删除该Cook
ie,则需要设置如下:Cookiecookie=newCookie(“time”,“”);cookie.setPath
(request.getContextPath()+”/”);cookie.setMaxAge(0);response.addCo
okie(cookie);示例:创建CookieDemo3(servlet),在CookieDemo3中删除名称为time的C
ookie:常用方法1.setMaxAge方法–设置Cookie的最大存活时间如果不设置该方法,Cookie是默认保存在浏览
器的内存中,如果中途关闭浏览器,随着浏览器内存的释放,该Cookie信息也随着内存的释放而丢失!如果设置该方法,Cooki
e将会以文件的形式保存在浏览器的临时文件夹中.即使浏览器关闭,内存释放了,但是临时文件夹中的文件还存在,仍然可以获取到Co
okie,获取Cookie中保存的数据.2.setPath方法–设置Cookie被浏览器带回来的路径Cookie被浏览器带
回来的路径默认是发送Cookie的Servlet所在的路径比如发送Cookie的Servlet为:http://localhos
t/day16_2/CookieDemo2http://localhost/day16_2/CookieDemo2,cookie
被浏览器带回来的路径就是CookieDemo2所在的路径:http://localhost/day16_2/这时,浏览器在访
问day16_2应用下任何一个资源时都可以带着Cookie,如果Cookie被带回来的路径不是WEB应用的根路径,这时又希望浏
览器在访问该应用下的任何一个资源时都能够将Cookie带回来,这时则需要设置Cookie的路径为当前WEB应用的根路径:cook
ie.setPath(request.getContextPath()+”/”);备注:后面拼上斜杠的目的是:如果当前WEB应用是
缺省的WEB应用,则通过getContextPath方法获取到的WEB应用的路径为一个空字符串,而路径不能为空,所以后面拼上
一个斜杠在网页中显示上次访问时间需求:当用户访问网站时,可以获取到上次访问的时间.实现方式2(通过SUN公司提供的Cookie
API实现):创建一个Servlet:CookieDemo2获取本次访问时间将本次访问时间发送给浏览器保存获取浏览器上次访问的
时间将上次访问时间响应给浏览器,提示用户您上次访问的时间为xx实现方式1(通过传统方式实现):创建一个工程:day16_2创建
一个Servlet:CookieDemo1实现CookieDemo1:先记录(获取)本次访问的时间(比如:2017-12-0711:40:30)将本次访问的时间以Set-Cookie响应头响应给浏览器保存通过Cookie请求头获取上次访问的时间将时间响应给浏览器(提示用户上次访问时间为xxx)SessionSession的原理Session是一个域对象案例:实现购物车
献花(0)
+1
(本文系金银宝100首藏)