Session/Request
当我们在网页之间互相传递数据时我们一般需要将数据存储到request或是session域中,而另一个页面或者后台则需要在对应的域中根据字段名取出值。
那么两者有什么不同?
Tomcat中session的默认生命周期为30min,也就是用户在页面时两次操作时间的间隔,如果超过30min,session自动销毁。如果用户在30min内刷新页面或者进行其他请求操作则重新计算30min。
对于request,它的生命收起可长可短。一般来说,request的生命周期会在我将请求传递到下个页面后页面发生跳转时结束生命周期。举个例子:A页面传递请求到B页面,在B页面我可以访问A传过来的所有请求值,但是当我正常跳转到C页面时,C页面就无法访问到A发起的请求了,因为A的request已经被销毁了。
但是为什么说可长可短?因为当前面例子中B页面可以通过转发请求将A发到B的request与自己的request一起转发到下一个C页面。但是如果挑战方式是重定向,那么request就会向之前例子中那样销毁。
Session/Cookie
- Session是存储在服务器上的,而Cookie是存储在客户端浏览器上的。因此安全性上Session更高。但是我们服务器的内存有限,不能什么都存在服务器上,所以我们一般把不重要的内容放在cookie上重要的东西放在session中。
- session在浏览器关闭后依旧存在。因为服务器无法获知客户端是否关闭了浏览器。而Cookie则不一定,因为Cookie分为会话Cooike与持久Cookie,前者存放在浏览器内存中,随浏览器的关闭而消亡。后者则存放在本地硬盘中,但是它的生命周期是由一个之前哪个session-timeout属性控制的不会随着浏览器关闭而消亡,而是随着session的消亡而结束。且session的信息是通过存放在cookie中的session id获取的。
- 当我们的seesion id存放的是会话cookie中时,关闭浏览器会导致我们损失这个session id,也就是我们平时看到的关闭浏览器就找不到session了。这里session并没有消失,只是失去了索引,所以在我们看来等于消失了。而这个session被保存到持久化Cookie还是会话cookie则由服务器决定。所以我们有时候会发现有些网站比如淘宝,我们在关闭浏览器后马上重新打开我们依旧登录着。但是有些网页我们则需要重新登陆。