cookies是什么意思?原理以及使用方法
社会3年前阅读:93赞:

 

导读:


存储客户端的状态
京东商城在没有登陆的情况下依然可以将商品加入购物车,那么这个购物车的数据存储到哪里呢?肯定不是request,因为如果是它的话,每加入一件,再去访问其它商品,在加入一件,上一次商品就没有了,因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,在未登录的情况下,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态。会话技术是帮助服务器记住客户端状态

会话技术Cookie和Session
从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。

Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookieSession:将数据存储到服务器端,安全性相对好,增加服务器的压力
Cookie技术详解
web开发:cookie是什么?原理是什么?怎么使用?用在什么地方?
创建Cookie

Cookie cookie = new Cookie(String cookieName,String cookieValue);
参数为cookie的名称和cookie的值,举例:Cookie cookie = new Cookie("username","zhangsan");

那么创建了一个cookie,并且向cookie中写入了数据username=zhangsan,注意cookie中不能写入中文,也就是说后面的验证码效验,如果是中文验证码,则不能用cookie

如果我们将这个cookie向客户端发送,那么相应头的形式是这样的

web开发:cookie是什么?原理是什么?怎么使用?用在什么地方?
设置Cookie在客户端的持久化时间

cookie.setMaxAge(int seconds);seconds为秒
cookie默认的生命周期是一个会话,就是说只要浏览器关系,他就没有了,如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里,设置多久时间,他就会存在多长时间

举例:

设置cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器自动删除该cookie信息cookie.setMaxAge(10*60);

设置Cookie的携带路径

如果不设置携带路径,那么该cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息,比如/aa/servlet的这个路径的servlet产生了cookie,那么只有在访问WWW/aa下的资源的时候才会带cookie,如果访问WWW/a.jsp则不会带cookie,因为他不是aa目录下的

示例:

cookie.setPath("/WEB16");代表访问WEB16应用中的任何资源都携带cookiecookie.setPath("/WEB16/cookieServlet");代表访问WEB16中的cookieServlet时才携带cookie信息cookie.setPath("/");访问服务器下的所有应用都携带这个cookie
向客户端发送cookie:

response.addCookie(Cookie cookie);创建完成之后,只有发送才能到答响应体

删除客户端的cookie:

如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时间为0的cookie进行覆盖即可

new相同name值的cookie,值无所谓(new相同的name的cookie会把前面相同name的覆盖)设置相同的setpath,最好设置最大Age为0,才删除,必须全部一样然后response.Add(这个cookie)向响应头增加一个set-cookie字段
第一次浏览器访问网站因为没有cookie,所以请求行没有cookie,假如他访问的servlet,new了一个cookie,并且response。add这个cookie,那么下次浏览器在访问这个网站资源(如果setpath合适的话),他会在请求头中带上这个cookie

web开发:cookie是什么?原理是什么?怎么使用?用在什么地方?
那么我们此时可以通过request获取这个cookie,并且解析里面的值

1)通过request获得所有的Cookie:(只能获取所有)Cookie[] cookies = request.getCookies();2)遍历Cookie数组,通过Cookie的名称获得我们想要的Cookiefor(Cookie cookie : cookies){if(cookie.getName().equal(cookieName)){String cookieValue = cookie.getValue();}}
一个cookie创建的时候只能添加一个键值对,一个web站点可以给web浏览器发送多个cookie,一个浏览器也可以存储多个cookie,一般允许存放300个cookie,每个网站允许存放20个

Session技术
web开发:cookie是什么?原理是什么?怎么使用?用在什么地方?
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间(session)这个它自动操作,不用我们关心。这个JSESSIONID是在cookie中存储,所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID,JSESSIONID被清了之后(cookie被删),即使session还存在,但是因为cookie存储的JSESSIONID不在了,也找不到这个Session了

cookie创建,之后,需要手动的response.addCookie,而session不用,只要创建之后,服务器会自动的将其放到了服务器端了。

1.获得Session对象

HttpSession session = request.getSession();

此方法会获得专属于当前会话的Session对象,如果服务器端没有该会话的Session对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有的Session返回,这个方法实质就是它会先获取cookie中的JSESSIONID,如果没有获取到则直接创建session,如果获取到JSESSIONID,则去找对应的session,如果有则获取session对象,如果没有则创建。

HttpSession session = request.getSession(false);//有就获取,没有不创建

如果cookie被清的话,虽然session还存在,但是当我们request.getSession();的时候因为JSESSIONID没有了,所以还是会创建一个新的session,并产生一个新的JSESSIONID

当我们有session对象的时候可以通过session.Getid()的方式来获取JSESSIONID

向session中存取数据(session也是一个域对象)

session.setAttribute(String name,Object obj);session.getAttribute(String name);session.removeAttribute(String name);
Session对象的生命周期

创建:第一次执行request.getSession()时创建

销毁:服务器(非正常)关闭时或session过期/失效(默认30分钟)

30分钟是从什么时候开始算呢?从不操作服务器端的资源开始计时,访问一个网页,然后就不点击了,就开始计时,如果29分钟不动,之后再访问网站的其它资源,又开始重新计时,从0开始

默认30分钟可以在工程的web.xml中进行配置<session-config><session-timeout>30</session-timeout></session-config>
注意浏览器关闭是cookie默认销毁,但是session还会存在,但是cookie销毁session就没有什么意义了,因为找session要靠cookie

3)手动销毁session

session.invalidate();

我们要树立一个观念cookie和session都是和浏览器相关的,和用户是否登陆无关
session对象由服务器创建,开发人员可以调用request对象的getsession方法获取session对象,因为session默认有效期为一个会话(虽然它30分钟消亡,但是它的有效期还是一个会话,原因是cookie默认有效期一个会话,cookie死亡,session也没意义了)

那么如何才能让session所对应的那个cookie存活时间长点呢?不至于关掉浏览器就灭亡,它存活时间长,session才能更有意义。

首先我们要获取或创建session,然后获取这个session的JSESSIONID,然后创建cookie(要完全按照session所对应的cookie的键,这样才会覆盖),还要设置相同路径,session的cookie的默认路径为/应用名称,之后设置好时间,这样就ok了

web开发:cookie是什么?原理是什么?怎么使用?用在什么地方?
session是为会话服务,也就是说所有浏览器访问的web应用都有机会可以获取到session,但是因为想要获取session前提是cookie,而cookie默认在哪个应用创建cookie,访问这个网站时浏览器才会带上这些cookie,所以自己的应用只能得到自己的cookie,访问自己的session。

如果浏览器把cookie给禁止了怎么办?
使用cookie的目的时让其带着sessionid去访问服务器资源,来确定是否有session可以用,若cookie被禁止的话,就只能在超链接后面加上session号了,这样访问超链接时,也相当于带着session号去访问资源,一次来确定是否有session可以用

web开发:cookie是什么?原理是什么?怎么使用?用在什么地方?
这样购买链接后面带有session号,点击链接访问servlet1,它内部获取session的话,它自动会按照session号来找,和cookie一样,只不过以前cookie的是自动,而这个是手动设置,当两种方式都存在时,以cookie为主

web开发:cookie是什么?原理是什么?怎么使用?用在什么地方?
同时打开多个浏览器在,只得是一个浏览器打开多个页面,比如新加选项卡,这些都是属于一个会话的

测径仪 http://lanpeng.jiont.com/
直线度测量仪 http://www.cejingyi.com.cn/
测宽仪 http://www.bdlanpeng.cn/
测厚仪 http://www.bdlanpeng.net/
网络推广 http://www.jiont.com/listinfo-195-1.html

END

zbg188198

更多社会新闻 前往简报社会新闻频道前往阅读

评论
大家都在看
借贷宝头条(从头条到借贷宝再到摩拜,创业一代不如一代?)
社会  3年前
意大利提拉米苏是什么意思?
社会  3年前
孕中期孕妇吃什么钙片比较好吸收(孕妇吃的钙片排行榜)
社会  3年前
2019什么手机性价比高又便宜(推荐这3款最值得购买的手机)
社会  3年前
苹果手机游戏手柄什么牌子好(果粉独享,iOS平台最佳游戏手柄)
社会  3年前
(旅游翻译软件哪个好用)2018出国翻译软件哪个好用 出国必备翻译软件 出国旅游翻译软件排名
社会  3年前
生活中的静电现象有哪些?生活中静电现象的应用
社会  3年前
(运动会解说词100字)运动会入场解说词大全 小学运动会班级解说词100字
社会  3年前
体内湿气重怎样祛除?教你几招去除
社会  3年前
(党员活动日主题及内容)党员活动日主题及内容 2019党员活动日记录范文(四篇)
社会  3年前
优格是什么东西做的(奶茶店的水果优格制作方法分享)
社会  3年前
(失业补助金领取条件)北京失业补助3千 失业补助金领取条件 失业补助金申请流程​
社会  3年前
什么叫学前教育(学前教育的定义是什么)
社会  3年前
瓦特发明了什么蒸汽机?对社会进步有巨大的影响
社会  3年前
(小米发布会门票)小米8今天发布 小米8发布会门票多少钱
社会  3年前
(广交会时间表)2019春季广交会时间表 2019年广交会是第几届
社会  3年前
淘宝运费险怎么退?运费险正确使用方法
社会  3年前
新顶级域名注册量排行(现在域名没那么值钱了)
社会  3年前
电话会议怎么开(开电话会议的注意事项)
社会  3年前
没人愿意干的十大暴利行业!第一利润可达300%
社会  3年前