cookie token session三者之间的区别

Cookie属于是数据的一种载体,存储在客户端(浏览器),当想要访问服务端时,cookie会跟随HTTP协议的每个请求发送出去。cookie对客户端是可见的,所以它是不安全的,容易被利用进行欺骗。

Session是诞生并保存在服务器的,由客户端发送(账号密码)给服务器,服务器生成一个session id给客户端,客户端下次带着session id 来进行请求。

Token是诞生在服务器,但保存在浏览器,,是由客户端主导。服务端收到请求,去验证用户名与密码;验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。

Cookie

session

Token

数据存放在浏览器

诞生并保存在服务器

诞生在服务器,但保存在浏览器

单个Cookie小于4KB

存储容量无上限

保管ASCII字符,并要编码存储为Unicode字符或二进制

能够存储任何类型的数据

使用 Base64 编码token包括3部分headerpoyloadsign

客户端可见,相对不安全

存储在服务器,相对安全

相对安全

设置属性,可长期有效

依赖于名为JSESSIONID的cookie,它的过期时间默认为-1,关闭窗口该session失效,所以不能达到长期有效

  支持跨域名访问

不支持跨域名访问

cookie和session的区别

 (扩展:cookie和session的共同之处在于cookie和session都是用来跟踪浏览器用户身份的会话方式)

 1、存储位置不同

  cookie的数据信息存放在客户端浏览器上, Cookie 在客户端(浏览器)。

  session的数据信息存放在服务器上,Session 在服务器端。

 2、存储容量不同

  单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie

  对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制

 3、存储方式不同

  cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据字符串,数字。

  session中能够存储任何类型的数据,包括且不限于string,integer,list,map等,字符串,数字,数组,对象。

 4、安全性不同

  cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。

  session存储在服务器上,不存在敏感信息泄漏的风险,重要交互信息比如权限等就要放在Session中。

 5、有效期不同

  开发可以通过设置cookie的属性,达到使cookie长期有效的效果。

  session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。

 6、服务器压力不同

  cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。

  session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。

7、浏览器支持不同

  假如客户端浏览器不支持cookie。

   cookie是需要客户端浏览器支持的,假如客户端禁用了cookie,或者不支持cookie,则会话跟踪会失效。关于WAP上的应用,常规的cookie就派不上用场了。

   运用session需要使用URL地址重写的方式。一切用到session程序的URL都要进行URL地址重写,否则session会话跟踪还会失效。

  假如客户端支持cookie

   cookie既能够设为本浏览器窗口以及子窗口内有效,也能够设为一切窗口内有效。

   session只能在本窗口以及子窗口内有效。

 8、跨域支持上不同

  cookie支持跨域名访问

  session不支持跨域名访问

 Session 的运行依赖Session ID,而 Session ID 是存在 Cookie 中的,通过Cookie来传递Session ID,也就是说,如果浏览器禁用了 Cookie,Session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 Session ID)。

  •   ①、使用post方式传递

   在隐藏表单域中传递session_id,然后目的页面用$_POST获取session_id,然后再用session_id('$_POST['sid']')使得当前页面能利用该session_id获取session文件

  ②、通过url传参的方式

   原理是一样的,在目的页面用$_GET['sid']获取session_id...

 ③、文件方式

   在生成session文件的代码中获取session_id并将其写入文件中,那么其他页面可以通过获取该文件内的session_id,进而获取session文件中的内容

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值