Cookie与Session的联系与区别

什么是Session?Session什么时候产生?

   Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。

   简单来说,客户端浏览服务端的时候,服务端把客户端信息以某种形式记录在服务器上,这种记录就是Session。所以Session是保存在服务器上的。

 

为什么要使用Session?什么是SessionID?

因为很多第三方可以获取到这个Cookie,服务器无法判断Cookie是不是真实用户发送的,所以Cookie可以伪造,伪造Cookie实现登录进行一些HTTP请求。

如果从安全性上来讲,Session比Cookie安全性稍微高一些,我们先弄清一点,SessionID是从哪里来的,sessionID是如何使用的:客户端第一次请求Session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,下次请求资源时(Session未过期),浏览器会将sessionID(实质是cookie)放置到请求头中,服务器接收到请求后就得到该请求的SessionID,服务器找到该id的session返还给请求者使用。

一个会话只能有一个session对象,对session来说是只看sessionID。按理来说,只要知道SessionID就可以进行伪登录。但是你想得到这个sessionID,得知道别人什么时候进行登录。同时sessionID是加密的,session过期时sessionID也会失效,想在短时间内功破加了密的sessionID有点难度。

 

Session的用途

  • Session可以记录用户的登录与行为数据,即记录下用户目前访问服务器上的那些内容,状态是什么,而考虑到这些数据用户修改的随意性很大,并没有必要直接存储在数据库中。

  • 在用户执行刷新操作时,即再次访问服务器时,可以直接根据Session,打开用户上次访问时网页的状态(如用户输入的表单内容等等),为用户带来更优的体验,提供个性化服务。

  • 用户的session信息非常关键,它记录了用户在进入页面、查看结果、点击结果以及后继的操作(比如翻页、加购物车等)。只有通过session信息才能把用户的行为联系起来,构建出完整的模型,因此从海量数据中把每一个用户所有session的操作都完整地挖掘出来非常重要。

 

session的实现原理

服务器会为每一个访问服务器的用户创建一个session对象,并且把session对象的id保存在本地cookie上,只要用户再次访问服务器时,带着session的id,服务器就会匹配用户在服务器上的session,根据session中的数据,还原用户上次的浏览状态或提供其他人性化服务。

 

浏览器禁用cookie后如何实现session

如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。

 

URL地址重写

URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成 “UserProfile/1.aspx”,这样的URL,这样的网址可以更好的被网站所阅读。

 

如何通过URL地址重写实现session的id传输

URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。

HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

 

Session的生命周期?

   根据需求设定,一般来说,半小时。

举个例子,你登录一个服务器,服务器返回给你一个sessionID,登录成功之后的半小时之内没有对该服务器进行任何HTTP请求,半小时后你进行一次HTTP请求,会提示你重新登录。这就是我们常说的Session已失效,也就是说就算的session_id还存在,但是session照样会结束自己的生命周期。

 

Cookie与Session之间有哪些区别或者是优缺点?

知道了Cookie与Session,我们来做一些简单的总结:

   1、Cookie可以存储在浏览器或者本地,session只能存在服务器

   2、session比cookie更具有安全性

   3、因为Session是存储在服务器当中的,所以Session过多,可能会对服务器产生压力。在我看来,Session的生命周期算是减少服务器压力的一种方式。

   4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

 

 

转载于:https://my.oschina.net/u/3803405/blog/1930982

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值