您的位置:首页 > 其它

对于Session、Cookie的理解

2017-05-18 20:23 369 查看
  Web中常用Session、Cookie来跟踪用户的会话。之前并不是清楚的理解Session、Cookie的机制。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。今天CTO pp告诉了我内幕,

  于是在此记录。

Cookie

  Cookie是服务器下发给客户端的一段信息,这些信息以文本文件的形式储存在客户端,客户端每次请求服务器的时候都会携带Cookie,从而使得服务器能够辨识请求者。

  具体来说:

  当我们第一次请求服务器的时候,服务器会将我们的一些信息储存,并构造Cookie返回。但是返回的Cookie并不是在响应体(Response Body)内,而是在响应头(Response Head)内部,浏览器会自己找到Cookie并储存在本地。

  当我们再次请求服务器的时候,浏览器会自动携带Cookie,以供服务器辨识。

Cookie生命周期

  Cookie是有时间限制的,一般来说Cookie的有效时间较长,pp以前写的Cookie的有效时长是一年,代码为证:

javax.servlet.http.Cookie cookie = new Cookie("ak", ak);
cookie.setMaxAge(365*24*3600);
cookie.setPath("/");
cookie.setHttpOnly(true);
response.addCookie(cookie);


Session

  Session是会话意思,Session是保存在服务器上。

  在其他博客上看到这样一句话来形象的解释Session和Cookie的区别:如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

  之前使用Nutz框架写服务器时,只是无意识的使用如下的代码:

HttpSession session = request.getSession();
session.setAttribute("user",user);
User user = session.getAttribute("user");


后来在“严刑逼问”下终于了解到Session的本质:Session对象在服务器端以key-value键值对的形式储存,通过上述方法设置内容、获取内容。

Session生命周期

  Session储存于服务器端,为了获取更高的存取速度,服务器一般把Session放在内存。每个人都有自己的Session,所以服务器不会长时间的保留Session,避免造成资源的浪费。

  Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、image等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。

  Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护Session(怎么维护呢?)用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: