`
nigelzeng
  • 浏览: 599004 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

session和cookie的粗浅理解

    博客分类:
  • Java
阅读更多

2013年的第一篇博文,写一写自己前段时间了解的session和cookie的概念。

然后近期还打算对linux的一些常用系统监控命令进行一个梳理,尽可能详细的把这些知识点总结起来。

so,技术总是要慢慢积累的,fighting,2013!

 

=====================丑陋的分割线=========================

 

1. session和cookie

        因为http协议被设计成为无状态的,对服务端来说每一次访问它都认为是一个新的客户,而不能识别这次请求是否是由一个客户端发出的。(无辨别用户,也就无法追踪客户端的行为、管理用户是否登录等状态)为了弥补这个缺陷,所以诞生了cookie与session。这两者都可以用来保存客户端的状态,cookie用于在客户端,而响应的用在服务端。

cookie

        服务器端通过set-cookie响应头来通知客户端浏览器生成对应的cookie,cookie也分持久和非持久,前者存储在内存(浏览器维护)里,后者存储于硬盘中。
cookie的格式如下:

cq (cookie名)
ccp%3D1 (cookie值)
www.newgxu.cn/ (cookie域和路径)
1600 (可选标志)
3062532992 (The Most Significant Integer for Expired Time, in FILETIME Format)
30341473 (The Least Significant Integer for Expired Time, in FILETIME Format)
1037746368 (The Most Significant Integer for Creation Time, in FILETIME Format)
30268048 (The Least Significant Integer for Creation Time, in FILETIME Format)
* (记录分隔符)

        如果不设置过期时间,那么这个cookie则为非持久cookie,关闭浏览器后这个cookie就会被销毁。设置了过期时间的cookie则会被存储在硬盘上。浏览器每次访问一个链接,会检查这个域名和路径下有没有响应的cookie,如果cookie的作用范围(域和路径组成)包含了访问的路径,则会把cookie添加在请求头的Cookie字段里一起发送出去。

session

        session是服务端用来标识用户的解决办法。从最简单的架构来理解,当一个请求到达服务端的时候,会判断这个服务端是否带有sessionID标识,如果没有,服务端会为该请求创建一个sessionID,保存在自己管理的session池里(我简单这么理解,没有深入java的httpsession实现)。如果该请求带有sessionID,则服务端会根据这个sessionID把改session取出来使用,比如使用session.getId()方法。

        那么怎样能让客户端在访问的时候把sessionID一起传给服务端呢?一是使用拼凑在URL里的方式,这需要在表达或者隐藏域里写入这个sessionID;二是把sessionID写在该域名下的cookie里,这样每次访问,浏览器就会自动把sessionID给发送过来。

        session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid是,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的 session。这里需要注意的是session始终是有服务端创建的,并非浏览器自己生成的。
        但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现。

 

所有的理解还未得到代码层面的支持,有机会会去读一读httpsession的实现。 :) 一个长远的计划

 

最后发现这篇文章写的不错,推荐一下:session和cookie的区别

-------- update 2013.1.28 -----

发现一个大牛写的session和cookie的文章:深入理解session和cookie

--------

 

===EOF===

nigelzeng 2013/1/6

2
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics