cookie/session的区别与联系

为什么要有cookie/session
在客户端浏览器向服务器发送请求,服务器做出响应之后,二者便会断开连接(一次会话结束)。那么下次用户再来请求服务器,服务器没有任何办法去识别此用户是谁。
有了cookie可以向服务器证明用户身份了,我们的web系统中是不是需要将用户的详细信息储存在某个位置供页面调用呢?用户的详细信息就包括姓名,年龄,性别等信息。而cookie是存在于客户端的,将用户详细信息通过网络发送到客户端保存是极不安全的。且cookie大小不能超过4k,不能支持中文。这就限制cookie不能满足存储用户信息的需求。这就需要一种机制在服务器端的某个域中存储一些数据,这个域就是session。
总而言之,cookie/session的出现就是为了解决http协议无状态的弊端,为了让客户端和服务端建立长久联系而出现的。

cookie技术
一、服务器端向客户端发送一个Cookie
1. 创建Cookie
Cookie cookie = new Cookie(String cookieName,String cookieValue);
示例:
Cookie cookie = new Cookie("username","zhangsan");
那么该cookie会以响应头的形式发送给客户端:
注意:Cookie中不能存储中文
2. 设置Cookie在客户端的持久化时间
cookie.setMaxAge(int seconds); ---时间秒
注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里;
3. 向客户端发送cookie
response.addCookie(Cookie cookie);
4. 删除客户端的cookie
如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时间为0的cookie进行覆盖即可

二、服务器端怎么接受客户端携带的Cookie
cookie信息是以请求头的方式发送到服务器端的:
通过request获得所有的Cookie:
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
         if(cookie.getName().equal(cookieName)){
          String cookieValue = cookie.getValue();
      }
    }

session技术
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内 存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客 户的唯一性标识;
1. 获取session
 HttpSession session = request.getSession();
此方法会获得专属于当前会话的Session对象,如果服务器端没有该会话的Session 对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有 的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在 session了)
2. 怎样向session中存取数据
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
3. Session对象的生命周期
创建:第一次执行request.getSession()时创建
销毁:
1)服务器(非正常)关闭时
2)session过期/失效(默认30分钟)
可以在工程的web.xml中进行配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>

cookie/session的区别与联系
区别:
 1、Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
 2、Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。cookie只能存放4k的数据,而session理论上没有做限制
 3、Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
 4、Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
联系:
 session虽说存放在服务器端,但是仔细看刚才的执行流程你会明白,session是依赖于cookie的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章