Cookie和Session机制

会话跟踪

会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。因为Http是无连接的,服务器并不能通过连接状态来确定用户信息,所以引入了Cookie和Session机制来确定用户,Cookie在客户端保存用户信息,Session在服务器保存用户信息。

什么是Cookie和Session?

Cookie机制:Cookie是客户端的解决方案,通过在客户端保存用户信息,方便下次访问某站点时服务器确定用户身份。Cookie信息以文本的形式保存在客户端,每次向服务器发送请求时都会带上这些特殊信息。
当用户通过浏览器访问一个支持Cookie的网站时,会通过Http请求来提交自己的一些用户信息,服务器对客户端响应时,会将这些信息通过Http响应中的Set-Cookie字段发送给客户端,意思是指示客户端建立一个Cookie,客户端会将这些信息保存在本地磁盘或内存中,之后再对服务器进行访问时,请求头部中的Cookie字段就会加上这些信息,服务器在收到请求并对请求做出分析得到该客户端的特有信息后,就会动态生成与该客户端对应的内容。
Cookie和Session机制_第1张图片

Cookie的生存周期:

  • 整个会话期间:会话期间用户的Cookie会被浏览器保存到内存中,浏览器关闭后该Cooike信息就没有了
  • Cookie还有可能被保存在磁盘文件中,这样即使浏览器关闭,下次再打开浏览器访问网站时,也会自动的带上Cookie信息

Cookie的不可跨域名性:
很多网站都会支持Cooike,但是网站颁发的Cookie只能在本域名内使用,而不能访问别的网站。这是由Cookie的隐私安全机制决定的,而且正常情况下,同一个一级域名下的不同的二级域名之间也是不可以共用一个Cookie的,如果要想支持二级域名之间共用同一个Cookie,需要设置Cookie中的domain参数。

Cookie的修改,删除:
Java中通过操纵Cookie类对象来修改Cookie,通过设置maxAge来修改Cookie的生存时间,

  • maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为–1。
  • maxAge为正数,maxAge被设置为多少多少秒,浏览器会将其写入磁盘文件中,无论浏览器或者电脑是否关闭,只要还在maxAge秒内,该Cookie就一直有效
  • maxAge为0,表示删除该Cookie,并不是真正的删除,而是通过设置Cookie的生存时间为0,浏览器会把它从内存或者磁盘中删除
  • 删除时服务器要再发送给客户端一个和之前一模一样的Cookie,但是生存时间设置为0,这个新的Cookie会覆盖之前的,达到删除的效果

Session机制:Session是服务器的解决方案,服务器为用户建立一个Session,意思就是在内存中开辟一段空间来保存当前用户的一些信息,通过Cookie返回给客户端一个Session id,这个 Session id 可以唯一标识这段空间,之后用户再进行访问的时候服务器就会通过这个Session id来确定用户。
这个Cookie是服务器默认生成的,maxAge为-1,表示仅当前浏览器内有效,打开两个浏览器窗口访问同一网站时会产生两个不同的Session,浏览器关闭后,该Session就会被清除。

Session的生存周期:

  • 服务器将Session开辟在内存中,就是为了提高性能, 每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。
  • Session在用户第一次访问服务器时创建,并且只有在访问JSP等程序时才会创建,访问HTML等静态资源时不会创建Session
  • Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。

Session的有效期:
服务器中为Session设置了超时时间,如果客户端在超时时间内一次都没有访问服务器,服务器就会将该Session删除
URL地址重写:
客户端可能存在禁用Cookie的情况,这时Session就会拼接到URL的后面,服务器通过解析重写后的URL也能获得客户端的Session id。
如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中

Cookie和Session的区别?

  • Cookie是客户端的解决方案,用户信息被保存在客户端的内存或者磁盘文件中,Session是服务器的解决方案,服务器为每一个用户在内存中创建了一个Session
  • Cookie不是很安全,因为别人可以分析存在本地的Cookie进行Cookie诈骗,考虑安全因素时使用Session
  • Session在访问量增多时,会比较占用服务器的性能,考虑性能因素时可以使用Cookie

什么时候不能用Cookie?什么时候不能用Session?

Session的实现与Cookie是有依赖关系的,所以有时候Cookie被禁用掉以后,Session也有可能不能使用

你可能感兴趣的:(Cookie,Session,会话跟踪,网络编程)