cookie与session

        

一、Cookie:

1.定义:cookie是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务起时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)。cookie是个存储在浏览器目录的文本文件,当浏览器运行时,存储在RAM中。一旦你从该网站或网络服务器退出,cookie也可存储在计算机硬驱上。当访客结束器其浏览器对话时,即终止所有cookie。

为什么要使用cookie?首先我们要知道一个概念,web程序是使用http协议传输的,而http协议是无状态的协议,对于事务处理没有记忆能力。缺少状态意味着如果后续处理前需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一刚面,在服务器不需要先前的信息时候它的应答就较快。cookie什么时候产生?

cookie的使用一先看需求。因为浏览器可以禁止cookie,同时服务端也可以不Set-cookie。

客户端向服务器端发送一个请求时,服务端向客户端发送一个cookie然后浏览器将cookie保存,cookie有两种保存方式,一种是将浏览器会将ccookie保存在内存中,还有一种是保存在客户端得我硬盘中,之后的http请求浏览器都会将cookie发送给服务器端。

具体流程如下:

客户端提交一个http请求给服务端

服务端这个时候做了两件事,一个是Set-Cookie,还有一个是提交响应内容给客户端,客户端再次向服务器请求时会在请求头中携带一个cookie

服务端提交响应内容给客户端

举例:分登录之前和登录后,登录前服务端给浏览器一个cookie,但是这个cookie里面没有用户信息,但是登陆成功之后,服务端给浏览器一个cookie,这个时候已经记录了用户的信息,在系统内任意访问,可以实现免登录。

cookie的生存周期?

  1. 缺点:

a.数量收到限制。一个浏览器能创建cookie的数量最多为30个,并且每个不能超过4kb,每个web站点能设置的cookie总数不能超过20个。

b.安全性无法得到保障。通常跨站点脚本攻击往往利用网站漏洞在网站页面植入脚本代码或网站页面引用第三方脚本代码,均存在跨站点脚本攻击的可能,在受到跨站点校本攻击时,脚本指令将会读取当前站点的所有cooki内容(已不存在cookie作用域限制),然后通过某种方式将cookie内容提交到指定的服务器(如:Ajax)。一旦cookie落入攻击者手中,它将会重现其价值。

c.浏览器可以禁用cookie,禁用cookie后,也就无法享用cookie带来的方便

二、Session:

很久很久以前,web基本就是文档的浏览而已,既然是浏览,作为服务器,不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的http协议,这就是请求加响应,尤其是,我不用记住是谁刚刚发了http请求,每个请求对我来说都是全新的。这段时间很嗨皮。

但是随着交互式web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统,哪些人往自己的购物车中放商品,也就是说我必须把每一个人区分开,这就是一个不小的挑战,因为http请求时无状态的,所以想出的办法就是给大家发一个会话标识(session id),说白了就是一个随机的字串,每个人收到的都不一样。每次大家向我发起http请求的时候,把这个字符串给一并捎过来,这样我就能区分开是谁了

这样大家很嗨皮了,可是服务器就不嗨皮了,每个人只需要保存自己的session id,而服务器要保存所以人的session id!如果访问服务器多了,就得由成千上万,甚至几十万个。这对服务器说是一个很巨大的开销,严重的限制了服务器的扩展能力。

session:在计算机中,尤其在网络应用中,称为“会话控制”。session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的web页之间跳转时,存储在session对象中的变量不会丢失,而是在整个用户对话中一直存在下去。当用户请求来自应用程序的web页时,如果该用户还没有会话,则web服务器将会自动创建一个session对象。当会话过期或被放弃后,服务器将终止该会话。

为什么要使用session?

因为第三方可以获取到这个cookie,服务端无法判断cookie是不是真实用户发送的,所以cookie可以伪造,伪造cookie实现登录进行一些http请求。如果从安全性上来讲,session比cookie安全性稍微高一些,我们先要知道一个概念--sessionID.sessionID是什么?客户端第一次请求服务器的时候,服务器会为客户创建一个session,并通过特殊算法算出一个session的ID,下次请求资源时(session未过期),浏览器会将sessionID(实质是cookie)放置到请头中,服务器接收到请求后就得到该请求的sessionID,服务器找到该ID的session返还给请求者使用。

session的生命周期?

根据需求设定,一般来说,半小时。举个例子,你登录一个服务器,服务器返回给你一个sessionID,登录成功之后的半小时内没有对该服务器进行任何http请求,半小时后你进行一次http请求,会提示你重新登录。

session有哪些缺陷?

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

三、cookie和session的使用

1.cookie的使用:获取:request.cookie.get(key,'默认值')

设置:resp.set_cookie(ke,uvalue,max_age=整数)

删除:resp.delete_cookie(key)

2.session的使用:获取:session.get(key,默认值)

设置:session.parmanent=True

session[key]=value

删除:指定删除:session.pop(key,None)

清空所有:session.clear()

四、知道了cookie与session,我们来做一些简单的总结:

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

2.session比cookie更具有安全性

3.session占用服务器性能,session过多,增加服务器压力

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

以上就是cookie与session对象内容与区别!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值