JavaEE学习总结(2) - cookie和session


cookie和seesion都是用于将浏览器与服务器之间多次交互过程当做一个整体来处理,维持多次交互,并且对多次交互所用到的数据进行管理的技术,也就是会话,解决会话跟踪的技术。

1.关于cookie

浏览器中我们见过的那个cookie就是这个东西,浏览器在访问服务器的时候,
当浏览器再次访问服务器的时候,会将这些数据以cookie消息头的方式发送给服务器。
cookie分为存在于浏览器进程的cookie和存在于硬盘的cookie。

2.cookie的使用

创建cookie:
   Cookie c = new Cookie(String name,String value);
   response.addCookie(c); 发送给客户端
查询cookie
   //如果没有cookie,返回null
   Cookie[] request.getCookies();
   String cookie.getName();
   String cookie.getValue(); 一个cookie中包含name和value。

session

1.关于session

session是一种维持会话的技术,同样可以存取数据。
客户向服务器发送请求,在服务器端由web服务器(tomcat),创建一个专属客户的session对象;每个session对象都可以存储客户端的各种数据;同时还包括一个唯一的标识(sessionID),tomcat同时会将这个sessionid发送给客户端的浏览器中(存在浏览器的进程cookie中,也可以自己编码设置再硬盘cookie中但没有意义,没有这样的需求),当浏览器再向服务器发请求是,浏览器会自动将cookie中的 sessionid发送给服务器,服务根据sessionid找到对应的session,这样也就保持了会话。

2.维持会话的条件(session)

1.客户端浏览器不能关闭。//客户端浏览器关闭之后session虽然还存在(没超时情况下),但sessionID是存在于浏览器的进程cookie中的,
所以关闭浏览器相当于浏览器进程结束了,那个cookie就不存在了,相应的sessionID也就找不到了,
那么再发请求服务器也收不到sessionID,也就维持不了会话了。但其实可以将保存sessionID的cookie设置保存到本地,这样关闭浏览器这个cookie也不会销毁,再打开浏览器还可以保持会话,但这样没有意义,没有需求。
2.session不超时
3.服务器不重启  //重启之后session就消失了。

3.获得session的方法

session是由服务器来创建的,我们只得获得,而不创建,获得的方法是
request.getSession();

4.session的常用方法;

getId():获得session的唯一标识
setAttribute(name,value):向session中存储一对值;
getAttribute(name):根据名取值;
getAttributeNames():获得所有属性名

5.设置session的超时时间可以通过两种方式

通过配置web.xml:
    <session-config>
                <session-timeout>1session-timeout>
            session-config>
在代码中可以使用:session.setMaxInactiveInterval(60*60*2);

cookie和session的区别

(1)cookie是一种客户端的状态管理技术,将状态写在浏览器端,
  而session是一种服务器端的状态管理技术,将状态写在web服务器上面。

(2) cookie有很多限制:可以被用户禁止,cookie能够保存的数据比较小(大约4k),而且保存的个数也有限制(300个左右),
cookie不安全,cookie只能保存字符串。
    而session能够保存更多的数据,相对更安全,保存的数据类型更丰富。
    session会将所有的状态写在服务器端,所以服务器的压力比较大,而cookie没有这个问题。

(3)Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
    Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

你可能感兴趣的:(学习总结,javaee)