Cookie与Session的联系与区别

一、Cookie与Session的介绍

Cookie是客户端存储数据的方式,Session是服务器端存储数据的方式。

我们用浏览器打开一个网页,用到的是HTTP协议,我们都知道,HTTP协议是无状态的,无状态的就是指这一次请求和上一次请求时没有任何关系的,没有关联的。但是这种无状态的好处就是快速。

所以带来的一个问题就是,我希望几个请求的页面有关联,比如:我在www.a.com/login.html里面登录了,我在希望在www.a.com/index.html页面也是登录状态,但是,这是两个不同的页面,也就是两个不同的HTTP请求,这两个HTTP请求时无状态的,也就是无关联的,所以无法单纯的在index.html中读取到它在login.html中已经登录了!

这个时候,一个新的客户端存储方式出现了:cookie。cookie是把少量的信息存储在用户自己的电脑上,它在一个域名下是一个全局的,只要设置它的存储路径在域名www.a.com下,那么当用户用浏览器访问时就可以从这个域名的任意页面读取cookie中的信息,就很好解决了在同一域名下的登录问题,就不用去反复查询数据库了。

但是cookie仅仅存储与客户端,并且自身的存储大小有限,用户可见,导致了cookie不安全,那么如何又安全,又可以方便的全局读取信息呢?于是,session诞生了。

从上面的描述来看,session就是在一次绘画中解决两次HTTP请求的关联问题,让两次请求产生联系,让两个页面都能读取到这个全局的session信息。session信息存储于服务器端,所以就很好的解决了安全的问题。

具体来说cookie采用的是在客户端保持状态的方案,而session采用的是在服务器端的保持状态的方案。由于采用服务器端保持状态的方案在客户端也需要保存一个标识(session id),所以session机制可能需要借助于cookie来达到保存标识的目的,但实际上还有其他的选择。

二、Cookie与Session的运行机制

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session id,如果已包含则说明以前已经为客户端创建过session,服务器就按照session id把这个session检索出来使用,如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,并返回给客户端保存。一般用cookie来保存这个session id。
但是cookie可以被用户手动禁止,因此需要另外一种技术叫做URL重写,就是把session id直接附加在URL的路径后面。
还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传给服务器。比如:

	<form action="/xxx" name="testform">
        <input type="hidden" name="sessionId" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
        <input type="text">
    </form>
三、Cookie与Session的比较

1、存在的位置:
cookie存在于客户端
session存在于服务器内存中,一个session域对象为一个用户浏览器服务

2、安全性:
cookie安全性低
session安全性高

3、网络传输量:
cookie会传递消息给服务器
session本身存放于服务器,不会有传送流量

4、生命周期:
cookie的生命周期是累积的。从创建时开始计时,20分钟后,cookie生命周期结束
session的生命周期是间隔的。从创建时开始计时,若在20分钟内没有访问session,那么session得到生命周期被销毁。但是,如果在20分钟内(如在第19分钟时)访问过session,那么将重新计算session的生命周期

5、访问范围:
cookie为多个用户浏览器共享
session为多个用户浏览器共享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值