cookie,session,token

来源:互联网 发布:淘宝考试不 编辑:程序博客网 时间:2024/05/22 14:34

cookie,session,token这几个概念一直不明白,今天特别的看了看,整理了一些东西,让自己有个大致的概念,做个记录。

1、cookie(储存在用户本地终端上的数据)

  • Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。

  • Chrome浏览器下查看cookie
    设置–>高级–>隐私设置和安全性–>内容设置–>cookie
    里面会显示每个网站的cookie个数,每个cookie是以key-value的形式储存的,里面会有名称、内容、域名、脚本可访问、创建时间、到期时间等

  • 本来想到目录下找具体文件的,但是没有找到,有知道的可以告知下具体位置在哪?
    /Users/XXX/Library/Caches/Google/Chrome/Default/Cache文件夹下的缓存文件都是一些没有后缀的文件,也打不开

2、session(会话)

  • 因为cookie是保存在客户端本地的,可以被修改,数据的安全性比较低,所以一些重要数据不能使用cookie来保存。

  • session 的运作通过一个session_id来进行。session_id通常是存放在客户端的 cookie 中,比如在 express 中,默认是connect.sid这个字段,当请求到来时,服务端检查 cookie 中保存的 session_id 并通过这个 session_id 与服务器端的 session data 关联起来,进行数据的保存和修改。

  • cookie 和session的区别
    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
    2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗。
    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。
    4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
    5、将登陆信息等重要信息存放为SESSION

3、token(“令牌”)

token是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库

2.传统身份验证

HTTP是一种没有状态的协议,并不知道谁是访问者。假设一个客户端访问服务端时发送账号密码,通过验证。下回它再次访问时,还是需要验证。
解决办法(session+cookie):
1)客户端访问时,通过了验证。
2)服务端生成一条记录,记录一些必要信息。
3)把记录这些信息的ID号发送给客户端
4)客户端收到ID号后存储在cookie中
5)下次客户端重新访问服务端时,带上cookie信息
6)服务端验证cookie里面的信息,如果能找到对应的记录,则用户通过了验证

3.token身份验证

1)客户端使用账号密码请求登录
2)服务端收到请求,验证账号密码
3)验证通过,服务端签发一个token给客户端
4)客户端收到token存储起来(例:存在cookie)
5)客户端每次请求服务端时带着服务端签发的token
6)服务端收到请求,验证token。验证成功则返回数据给客户端

作者:Mcyboy007
链接:http://www.jianshu.com/p/5ac166c5fe76

4、Android token的使用

  • 我们先解释一下他的含义:

    • Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

    • Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

    • 使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
      了解了Token的意义后,我们就更明确的知道为什么要用他了。

  • 使用Token?
    • 1、用设备号/设备mac地址作为Token(推荐)
      • 客户端:客户端在登录的时候获取设备的设备号/mac地址,并将其作为参数传递到服务端。
      • Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,如果相同则放行,不同则拒绝。
    • 分析:此刻客户端和服务器端就统一了一个唯一的标识Token,而且保证了每一个设备拥有了一个唯一的会话。该方法的缺点是客户端需要带设备号/mac地址作为参数传递,而且服务器端还需要保存;优点是客户端不需重新登录,只要登录一次以后一直可以使用,至于超时的问题是有服务器这边来处理,如何处理?若服务器的Token超时后,服务器只需将客户端传递的Token向数据库中查询,同时并赋值给变量Token,如此,Token的超时又重新计时。
  • 用session值作为Token
    • 客户端:客户端只需携带用户名和密码登陆即可。
    • 客户端:客户端接收到用户名和密码后并判断,如果正确了就将本地获取sessionID作为Token返回给客户端,客户端以后只需带上请求数据即可。
    • 分析:这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。

链接:http://wyong.blog.51cto.com/1115465/1553352