对于Session、Cookie的理解
2017-05-18 20:23
369 查看
Web中常用Session、Cookie来跟踪用户的会话。之前并不是清楚的理解Session、Cookie的机制。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。今天CTO pp告诉了我内幕,
于是在此记录。
具体来说:
当我们第一次请求服务器的时候,服务器会将我们的一些信息储存,并构造Cookie返回。但是返回的Cookie并不是在响应体(Response Body)内,而是在响应头(Response Head)内部,浏览器会自己找到Cookie并储存在本地。
当我们再次请求服务器的时候,浏览器会自动携带Cookie,以供服务器辨识。
在其他博客上看到这样一句话来形象的解释Session和Cookie的区别:如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
之前使用Nutz框架写服务器时,只是无意识的使用如下的代码:
后来在“严刑逼问”下终于了解到Session的本质:Session对象在服务器端以key-value键值对的形式储存,通过上述方法设置内容、获取内容。
Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、image等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护Session(怎么维护呢?)用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。
于是在此记录。
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)”了一次。
相关文章推荐
- 对于 PHP cookie 与 session 的理解
- 对于session与cookie机制,自己的一点理解
- 对于session与cookie深入理解
- 对于session和cookie的理解
- 对Cookie和Session的深入理解
- session和cookie的最深刻理解
- 对Session和Cookie的区分与理解
- 对session和cookie的一些理解
- 对于不支持cookie的浏览器,使用response.encodeURL方法来使用session
- Cookie和Session的关系(个人理解)
- 理解Cookie与Session
- Java Socket实现HTTP客户端来理解Session和Cookie的区别和联系
- 对于session序列化跟session的钝化与活化的粗浅理解
- Cookie 与session 通熟一点的理解, 并且Cookie防劫持的处理
- 深入理解PHP中的Session和Cookie
- 通俗理解cookie和session
- 对session和cookie的一些理解
- 深入理解Servlet/JSP之“Cookie和Session原理”
- 对于Session的一点理解
- Java Web学习之Cookie和Session的深入理解