十一城

跬步千里,小流江海。

Home Linux ML Python Java Thoughts KmKg BookCan Links About

2017-02-18
session与cookie

• 分类: java • 标签:

cookie机制

cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。

IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies 。

具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力。

正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。

session机制

session机制采用的是一种在服务器端保持状态的解决方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的。而session提供了方便管理全局变量的方式 。

session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器。

就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的session机制更安全些,因为它不会任意读取客户存储的信息。

步骤:

  1. 当有Session启动时,服务器生成一个唯一值,称为Session ID(好像是通过取进程ID的方式取得的)。
  2. 然后,服务器开辟一块内存,对应于该Session ID。
  3. 服务器再将该Session ID写入浏览器的cookie。
  4. 服务器内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放改内存块。
  5. 当浏览器连入IIS时并请求的ASP内用到Session时,IIS就读浏览器Cookie中的Session ID。
  6. 然后,服务检查该Session ID所对应的内存是否有效。
  7. 如果有效,就读出内存中的值。
  8. 如果无效,就建立新的Session。

jsession id

jsession记录的是你的session id 正常情况下,如果你的浏览器开启Cookie的话,会将session id 设置到cookie中,但如果浏览器关闭了Cookie,则每次请求url后面会附加这个session的标识

当客户端的cookie被管理员关闭,jsp就会利用urlrewrite的方式传值,而参数就是jsessionid,若随后的请求中cookie又被启动,那么jsessionid将会自动消失

共享session

session与cookie

cookie是指网站为了辨别用户身份而储存在客户端的数据。cookie 一般来说 4KB 大小。

session相当于在服务器上建立了一份用户的档案,用户访问时,查看档案即可。

cookie和session都是用来跟踪浏览器用户身份的会话方式

cookie保存在客户端,session保存在服务器端

参考

  1. http://www.cnblogs.com/sharpxiajun/p/3395607.html

dzzxjl

Home Linux ML Python Java Thoughts KmKg BookCan Links About