专栏首页学海无涯Java Web之Cookie和Session的理解

Java Web之Cookie和Session的理解

Cookie和Session.jpg

日常现象

  • 登录了某个网站,过一会儿再登录,诶,不用输入密码了,直接是登录状态了,好神奇~~~
  • 在某网站看了一部手机,接下来浏览其他网站,旁边的广告全是手机和类似信息,好恐怖~~~
  • 浏览某网站时,提示我是第66666位访问的客户,真的假的?

其实这些都是Cookie和Session在后面作祟,下面就带大家学习学习这两个东东。

Cookie和Session的异同

  • Cookie与Session都是用来保存用户状态信息的一种方法或者手段;
  • Cookie是保存在客户端的临时文件夹, Session是保存在服务器的内存中的,服务器使用一种类似于散列表的结构来保存信息,一个Session域对象为一个客户浏览器服务;
  • Cookie安全性较差,Session安全性较高;
  • Cookie的保存时间可以很久(以txt格式保存在客户端硬盘),Session保存的时间很短,一般是30分钟;
  • Cookie为多个客户浏览器共享,Session为一个客户浏览器独享;
  • Session是通过Cookie的机制来实现的。

两个经典问题与URL重写

1、客户端禁用Cookie,问Session还能工作吗?

  • 不能(事实)绝大多数的网站是这样,原因是没有使用URL重写机制来解决Cookie被禁用的问题。(URL重写代码量大而且只能应用在动态的页面静态的不行)
  • 能(事实)微乎其微的网站可以(比如:卓越),原因是它使用了URL重写机制。

2、 Cookie可以用来实现购物车功能吗? 能,Session能做的Cookie也能做。

** 本质 ** 无论Cookie,还是URL重写,目的都是向服务器传递JSESSIONID=32位字符串的key和value名值对。

理解Cookie-Session机制

当程序需要为某个客户端的请求创建一个Session的时候,服务器首先检查这个客户端的请求里是否已包含了一个Session标识——称为 Session id,如果已包含一个Session id则说明以前已经为此客户端创建过Session,服务器就按照Session id把这个 Session检索出来使用。如果客户端请求不包含Session id,则为此客户端创建一个Session并且生成一个与此Session相关联的Session id,这个 Session id将在本次响应中返回给客户端保存。客户端保存这个Session id的方式可以采用Cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发回给服务器。一般这个Cookie的名字都是类似于JSESSIONID。对Session来说,除非应用程序通知服务器删除一个Session,否则服务器会一直保留它。浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器不会知道浏览器已经关闭。之所以会有这种错觉,是大部分Session机制都使用会话Cookie来保存Session id,而关闭浏览器后这个 Session id就消失了,再次连接服务器时也就无法找到原来的Session。如果服务器设置的Cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的Session id发送给服务器,则再次打开浏览器仍然能够找到原来的Session。也就实说关闭浏览器不会导致服务器端Session被删除,但是大量的Session一直在也服务器内存,服务器也受不了,所以服务器为Session设置了一个失效时间,当距离客户端上一次使用Session的时间超过这个失效时间(一般为30分钟)时,服务器就可以认为客户端已经停止了活动,才会把Session删除以节省服务器端的存储空间。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS开发之UITableView联动实现城市选择器

    在 iOS开发之城市选择器一文中用两列的UIPickerView实现了城市选择器,今天用两个UITableView来实现一下,首先这种联动在很多地方用得上,而且...

    YungFan
  • iOS开发之UICollectionViewDataSourcePrefetching

    在iOS10中,苹果为UICollectionViewCell引入了Pre-Fetching预加载机制用于提升它的性能。主要引入了一个新的数据源协议UIColl...

    YungFan
  • Android开发之ViewPager+Fragment

    使用步骤 1、Activity的布局文件 <android.support.v4.view.ViewPager android:id="@+id/v...

    YungFan
  • 状态管理-Session

    qubianzhong
  • 基于ZooKeeper的分布式Session实现

    用户1263954
  • 在 PHP 中使用和管理 Session

    与 Cookie 一样,Session 技术也是用于解决 HTTP 协议无状态的问题,不过,与 Cookie 数据保存在客户端不同,Session 数据存储在服...

    学院君
  • 探索式测试,到底应该如何开展?

    对于探索式测试的具体执行层面,我们会采用一种称之为Session-Based Testing management(简称SBTM)的方法来进行测试。关于SBTM...

    测试小兵
  • Infor ERP LN Correct Purchase Order (History) Amount – tdcor0019m000

    自从用了ERP LN之后,发现很多Session从Menu里面拿掉了,所以不少有用的Session明明存在,却不能很容易找到。上次是财务的Rebuild Ope...

    崔文远TroyCui
  • Session的工作原理和使用经验

    Session字面含义就是会话。由于HTTP是无状态协议,为了保持浏览器与服务器之间的联系,才有了Session。Session就是用于在服务器端保存用户状态的...

    KenTalk
  • Cookie禁用了,Session还能用吗?详解

    Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但为什么...

    joshua317

扫码关注云+社区

领取腾讯云代金券