A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© llw1995 初级黑马   /  2018-4-2 17:34  /  2379 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

javaweb的学习持续长达二十多天之久,从刚开始的手足无措到后来的慢慢适应,经历了太多的坎坷。经过这个阶段的学习,我体会到web项目最根本的就是页面传参和java代码带值展示到页面中。能熟练掌握数据的传递和展示,web项目就离大成不远了


参数传递无非在页面中提交或者异步访问,相对好理解。往往从javaee中往页面传参让我犯难,不知道该用cookie还是session。所以这里我深入去了解了这二者的异同。


一.Cookie 1.什么是Cookie?

Cookie是保存在客户端的,以name,value的形式保存。当用户使用浏览器访问服务器产生数据时,服务器程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web服务器就可以从请求中获得用户的数据了。

2.java 中实现cookie的相应的API

javax.servlet.http.Cookie类是java中的一个类。它用于创建一个Cookie,java的Response接口定义了一个addCookie方法,它可以在其响应头中增加一个相应的Set-Cookie头字段。同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。Cookie类有以下的一些常用的方法:

publicCookie(String name,String value) 构造方法

setValue与getValue 设值与取值

setMaxAge与getMaxAge 设置和获取cookie的最长存在的时间,单位为秒。

setPath与getPath方法 设置路径,可以实现同一应用服务器内共享cookie

setDomain与getDomain 设置主机,可以实现跨域共享cookie

getName方法 获取cookie的名字

3. 操作cookie需要注意的一些问题

Cookie的setMaxAge的方法的单位为秒,当设置为-1时,浏览器关闭cookie从浏览器自动删除。

一个Cookie只能标识一种信息,它必须含有一个name和一个value,一个WEB应用可以给一个WEB浏览器发送多个Cookie,同样的,用户的浏览器也可以存储多个WEB站点写入的Cookie。

浏览器存储的cookie的个数和大小是有限制的,一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

cookie默认是用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,服务器程序就需要使用maxAge,并给出一个以秒为单位的时间。如果设置为0则是命令浏览器删除该cookie。

比较重要,也比较容易忽略的是,删除cookie时,path和domin必须一致,否则不会删除.所以当我们想要删除一个cookie时,不光要设置maxAge为0,还需要把他的path和domin也设置的和原来的一样,以前做一个项目的时候,遇到过这个问题。

所以在我们需要保存客户信息的时候,我们往往会使用cookie,他可以将信息保存在浏览器端,方便客户下次登录时使用。比如我们实现的自动登录和显示客户昵称,都是使用cookie来带值展示的。不过cookie的生命要根据需求进行设置。


二.Session 1.什么是Session?

和cookie不同的是,Session是保存在服务器端的,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,session是用户浏览器独享的,用户浏览器在访问服务器时,产生的数据也可以放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

2.Session的API

在java中,有一个接口,javax.servlet.http.HttpSession。它主要有下面一些方法。

getId 此方法返回唯一的标识,这些标识为每个session而产生。

   getCreationTime()返回session被创建的时间。返回的是一个long型的从1970年1月1日到创建时间的毫秒数,即时间戳。

   GetLastAccessedTime 返回session最后被客户发送的时间。最小单位为千分之一秒。

   getAttribute 取session中的一个对象的值,由于这个方法的返回值是Object,所以要进行强制类型的转换。

setAttribute 设置一个key和value。相同的key时,新的值会替换掉任何以前的值。类似于HashMap.需要注意的是,设置的值为简单类型时,会自动装箱成对应的包装类。

3.Session的一些细节问题

服务器为每个用户浏览器创建一个session对象,默认情况下,一个浏览器独占一个session对象。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问这个web应用的其他资源时,可以从用户的session中取出该用户的数据,为用户服务。Session对象由服务器创建,保存在服务器的内存中,我们可以调用request对象的getSession方法得到服务器的session对象。

当一个session长时间不在服务器活动时,就会被从服务器内存中清除,此时Session便失效。Tomcat中的Session的默认失效时间为20分钟。

用户浏览器传递上来的cookie中,会有一个保存诸如sessionID之类的cookie。所以服务器可以识别客户端浏览器对应的Session。所以当客户端禁用Cookie后,可以URL重写解决这个问题。主要有两个方法:response. encodeRedirectURL(java.lang.Stringurl) 用于对sendRedirect方法后的url地址进行重写。response.encodeURL(java.lang.Stringurl)用于对表单action和超链接的url地址进行重写。


与cookie不同时的是,session存储的是服务器气端的信息,用户可以在这个服务器的任意一个页面访问到session中存储的信息,所以session中存储的多为web开发中的资源信息,比如商城项目中商品的信息,一般不存储客户信息。


了解了cookie和session的API我们不难发现他们的异同之处。

相同点:二者都是作为存储信息的对象,且都可以将其中的值展示在页面中。


我们主要关注的是二者的不行之处:
1.Cookie是把用户的数据写给用户的浏览器,保存在浏览器中。Session是把用户的数据写到用户独占的session中,保存在服务器端。

2.一个Cookie对象代表一个cookie,只能表示一个name和value,cookie中保存的是字符串。。Session类似于一个服务器端的一个基于HashMap的缓存。可以放入多个具有key,value的键值对的属性。value可以是任意的对象。

3.Session没有path和domain,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。

4.session是以cookie为基础的, 服务器需要通过客户端传来的一个名为JSESSIONID的cookie 来找到它对应的session。


这就是我在刚学web项目中困扰我些许时间的问题,今天能拿出来和大家分享,深感荣幸,如果有不恰当的或者理解理解有误的地方,希望大家不吝指教。

评分

参与人数 2技术分 +6 黑马币 +12 收起 理由
皖哥哥 + 6 + 4 赞一个!
合肥就业部 + 8

查看全部评分

11 个回复

倒序浏览
如果我有会的地方,一定会告诉你
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
厉害哦
回复 使用道具 举报
一看就是大牛
回复 使用道具 举报
回复 使用道具 举报
朱浩 来自手机 黑马粉丝团 2018-5-3 18:02:44
10#
6666666
回复 使用道具 举报
骑着小猪看雪 来自手机 黑马粉丝团 2018-5-4 10:21:57
11#
6666
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马