简述Cookie和Session的概念及区别

前言:Cookie与Session是用来跟踪用户的整个会话的技术;Cookie通过在客户端记录信息确定用户身份 , Session通过在服务器端记录信息确定用户身份 

先来了解一下什么是Cookie?

Cookie意为“甜饼”,是 由W3C组织提出 ,最早由Netscape社区发展的一种机制;目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就 给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了这就是Cookie的工作原理 。Cookie实际上是一小段的文本信息,模拟客户端请求服务器时需要记录该用户状态,就使用response向客 户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来,当浏览器再请求该网站时浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie以此来辨认用户状态,服务器还可以根据需要修改Cookie的内容

1、cookie是存储于访问者计算机中的变量 
2、cookie是浏览器提供的一种机制 
3、可以由JavaScript对其进行控制(设置、读取、删除)
Cookie设置 
每个cookie都是一个 名/值 对,(key=value)格式的字符串 
例如: document.cookie=”user1=MrYu”; 
如果要改变一个cookie的值,只需重新赋值 
例如: document.cookie=”password=Liquor”; 
如果不设置时间,浏览器关闭,cookie就会消失

设置有效期: 
var dates=new Date(); 
dates.setDate(dates.getDate()+3); //按天数设置 
document.cookie=”user1=Liquor; expires=”+dates;

删除cookie 
cookie过期会自动消失 
要删除一个cookie,可将其有效期设为一个过去的时间 
例如: 
var date=new Date(); 
dates.setDate(dates.getDate()-1); 
document.cookie=”user1=Liquor; expires=”+dates;

读取cookie 
document.cookie=”user1=MrYu”; 
document.cookie=”user2=Liquor”; 
var cookies=document.cookie; 
alert(cookies); 
返回:”user1=MrYu; user2=Liquor”

只能够一次获取所有的cookie值 
用户必须自己解析这个字符串,来获取指定的cookie值 
split() 方法用于把一个字符串分割成字符串数组

Cookie主要作用有哪些?

1.可以在客户端上保存用户数据;起到简单的缓存和用户身份识别等作用
2.保存用户的登陆状态;用户进行登陆服务器生成特定的cookie返回给客户端便于下次访问该域名下的任何页面
同样客户端将该cookie的信息发送给服务器,服务器经过检验来判断用户是否登陆
3.记录用户的行为;常用场合:(1)保存用户登录状态(2)跟踪用户行为(3)定制页面(4)创建购物车等等

Cookie的优点:极高的扩展性和可用性

1.cookie可以实现跨页面全局变量 
2.cookie可以跨越同域名下的多个网页,但不能跨越多个域名使!用 
3.同一个网站中所有页面共享一套cookie可以设置有效期限存储空间4-10KB左右
5.cookie机制将信息存储于用户硬盘因此可以作为跨页面全局变量这是它最大的一个优点 
6.通过良好的编程,控制保存在cookie中的session对象的大小
7.通过加密和安全传输技术(SSL),减少cookie被破解的可能性
8.只在cookie中存放不敏感数据,即使被盗也不会有重大损失
9.控制cookie的生命期,使之不会永远有效偷盗者很可能拿到一个过期的cookie

有利必有必下面来看看Cookie的弊端(缺点)有哪些?

1.增加流量消耗,每次请求都需要带上cookie信息
2.安全性隐患,cookie使用明文传输。如果cookie被人拦截了那人就可以取得所有的session信息,即使加密也与事无补因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了
3.Cookie数量和长度的限制,虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担
但还是有很多局限性的,最多只能有20条cookie,每个cookie长度不能超过4KB否则会被截掉

IE6或更低版本最多20个cookie
IE7和之后的版本最后可以有50个cookie
Firefox最多50个cookie
chrome和Safari没有做硬性限制
IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie
在较高版本的浏览器中js提供了sessionStorage和globalStorage;在HTML5中提供了localStorage来取代globalStorage;sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

5.cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节
6.浏览器本地存储,有些状态不可能保存在客户端。例如为了防止重复提交表单我们需要在服务器端保存一个计数器,如果我们把这个计数器保存在客户端那么它起不到任何作用
总结:IE 提供了一种存储可以持久化用户数据,叫做userdata,从IE5.0就开始支持。每个数据最多128K,每个域名下最多1M。这个持久化数据放在缓存中,如果缓存没有清理,那么会一直存在

二、简述Seesion的概念

Session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息;将用户的会话信息保存在服务端,key值是随机产生的自符串,value值时session的内容

Seesion的依赖性及主要特性

依赖于cookie将每个用户的随机字符串保存到用户浏览器上,服务器通过Cookie发送给客户端一个sessionID
sessionID对应服务器里的一小块内存,这里保存着用户的信息,例如登录信息,购物车信息等
每次用户访问服务器的时候,服务器通过浏览器发送来的cookie里的sessionID去读取对应的内存里的信息,以此来知道用户的隐私信息
session的好处是防止用户随意篡改cookie,获取别人的信息;如果用户随意篡改了sessionID,那么只能重新登录;因为sessionID是随机数,或者随机数夹杂着一些字母所以没有可能暴力破解sessionID获取别的用户的信息
类比:session相当于发会员卡,会员卡上只有卡号(sessionID)。下次去健身房的时候只要看卡号上就能确定你本人的去他信息。而cookie相当于把信息都写在会员卡上了
将 SessionID(随机数)通过 Cookie 发给客户端
客户端访问服务器时,服务器读取 SessionID
服务器有一块内存(哈希表)保存了所有 session
通过 SessionID 我们可以得到对应用户的隐私信息,如 id、email
这块内存(哈希表)就是服务器上的所有 session

三、总结Cookie跟Seesion区别的区别

cookie 和session的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗;考虑到安全应当使用session
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能;考虑到减轻服务器性能方面应当使用COOKIE
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
发布了35 篇原创文章 · 获赞 16 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/qq_38795430/article/details/100569733