cookies、session解释及区别

cookies、Session解释及区别

导语:
我们在实际生活中总会遇到这样的事情:
我们一旦登录(首次输入用户名和密码)某个网站之后,
当我们再次访问的时候(只要不关闭浏览器),无需再次登录。
而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录,而且有的网站还提供购物车的功能。
这些简单实用的功能就是通过Cookie与Session实现的

概念

Cookie:
有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

Session:
Session直接翻译成中文比较困难,一般都译成时域。指一个终端用户与交互系统进行通信的时间间隔.

Session实际上是一个特定的时间概念,通常指从注册进入系统到注销退出系统之间所经过的时间。以及如果需要的话,可能还有一定的操作空间。
具体到Web中的Session:指的就是用户在浏览某个网站时,从进入网站到关闭这个网站所经过的这段时间,也就是用户浏览这个网站所花费的时间。
注意:一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。

区别
  • cookie和session都是用来跟踪浏览器用户身份的会话方式。
  • 1、cookie数据存放在客户端浏览器上,session数据放在服务器上
  • 2、存储内容:cookie只能保存字符串类型,以文本的方式;session通过类似与Hashtable的数据结构来保存,能支持任何类型的对象(session中可含有多个对象)
  • 3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
  • 4、存储的大小:cookie:单个cookie保存的数据不能超过4kb;就是说一个站点在客户端存放的COOKIE不能大于4K,session大小没有限制。
  • 5、安全性:cookie:针对cookie所存在的攻击:Cookie欺骗,Cookie截获;别人可以分析存放在本地的COOKIE并进行,session的安全性大于cookie。

原因如下:
(1)sessionID存储在cookie中,若要攻破session首先要攻破cookie;
(2)sessionID是要有人登录,或者启动session_start才会有,所以攻破cookie也不一定能得到sessionID;
(3)第二次启动session_start后,前一次的sessionID就是失效了,session过期后,sessionID也随之失效。
(4)sessionID是加密的
(5)综上所述,攻击者必须在短时间内攻破加密的sessionID,这很难。

1、Cookie机制

在程序中,会话跟踪是很重要的事情。
理论上:
一个用户的所有请求操作都应该属于同一个会话;
而另一个用户的所有请求操作则应该属于另一个会话;
二者不能混淆。
例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。

Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。

一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。
这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。

Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie实际上是一小段的文本信息。
cookie机制:如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie。如果在浏览器中设置了cookie的过期时间,cookie被保存在硬盘中,关闭浏览器后,cookie数据仍然存在,直到过期时间结束才消失。
Cookie是服务器发给客户端的特殊信息,cookie是以文本的方式保存在客户端,每次请求时都带上它

客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。
客户端浏览器会把Cookie保存起来。

当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。
服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

客户端(浏览器) 服务端 你好!我要请求数据 生成用于辨别 用户的cookie 很好,我这就给你 给你之前我对你的来访做个标记,顺便送你点小礼物cookie 记录用户信息 通过sessionId查到具体 客户端记录 保存cookie 你好!我还要请求,看看我干了什么 可以,我这就去session查查 哦原来你干了XXXXXX 客户端(浏览器) 服务端
2、Session机制

除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

客户端浏览器访问服务器的时候,服务器收到请求需要创建session对象时,首先会检查客户端请求中是否包含sessionid。如果有sessionid,服务器将根据该id返回对应session对象。

如果客户端请求中没有sessionid,服务器会创建新的session对象,并把sessionid在本次响应中返回给客户端。[服务器把客户端信息以某种形式记录在服务器上]。通常使用cookie方式存储sessionid到客户端,客户端浏览器再次访问时只需要按照规则将sessionid发送给服务器。服务器从该Session中查找该客户的状态就可以了。

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

如下图所示:张三和李四分别访问该网站,在服务端会产生两个SessionID来区分该用户,而在客户端将对应的SessionID存放在Cookie中,以便我们再次访问时得到我们所需的资源。

在这里插入图片描述

应用场景:

cookie:
(1)判断用户是否登陆过网站,以便下次登录时能够实现自动登录(或者记住密码)。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。
(2)保存上次登录的时间等信息。
(3)保存上次查看的页面
(4)浏览计数
在这里插入图片描述

session:Session用于保存每个用户的专用信息,变量的值保存在服务器端,通过SessionID来区分不同的客户。
(1)网上商城中的购物车
(2)保存用户登录信息
(3)将某些数据放入session中,供同一用户的不同页面使用
(4)防止用户非法登录

缺点:

cookie:(1)大小受限
(2)用户可以操作(禁用)cookie,使功能受限
(3)安全性较低
(4)有些状态不可能保存在客户端。
(5)每次访问都要传送cookie给服务器,浪费带宽。
(6)cookie数据有路径(path)的概念,可以限制cookie只属于某个路径下。

session:(1)Session保存的东西越多,就越占用服务器内存,对于用户在线人数较多的网站,服务器的内存压力会比较大。
(2)依赖于cookie(sessionID保存在cookie),如果禁用cookie,则要使用URL重写,不安全
(3)创建Session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用session变量将会导致代码不可读而且不好维护。

总结

session和cookie是我们必须要掌握的技术,因为我们要经常使用它来进行消息的传递与验证;
实际应用需要项目中慢慢体会,例如,如何控制他们的生命周期,有效期等等;
而且它们还应用在权限控制,单点登录等技术

彻底弄清楚session是什么?

前端cookie和session
session浅析(前端方向)

web前端面试题Session、Cookie基础知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值