-
令牌Token作用和使用场景
Token主要是用于登录模块使用,实现在设置的一段时间内来实现自动登录,减少再次输入账号密码,提高用户体验 -
为什么不使用cookie和session来实现自动登录而使用令牌Token
不使用cookie是因为cookie数据保存在浏览器上数据不加密容易被伪造数据不安全,加上cookie数据手动可以删除数据。 不使用session的原因是因为session数据以文件的形式保存在服务器,如果用户数量大,这样增加造成服务器压力,和session数据在不同服务器上数据不共享,因为现在用户量大,都是使用分布式服务器,这就是不适用的原因
-
Token生成和保存解释
后端获取前端登录时传来的账号和密码等ip信息,加上自定义密钥和过期时间,使用jsonwebtoken库,来签名加密数据生成token,保存一份到数据库,响应一份token到前端,前端获取token,通过localStorage.setItem()来保存到浏览器,登录成功后,每次发起请求的时候,通过localStorage.getItem()来获取token值,然后在请求头上面携带token值,传到后端,后端通过jsonwebtoken库来解密验证token值是否过期和解密后的用户账号和密码IP值从数据库获取响应用户数据,如果过期则跳到登陆界面
-
localStorage的作用和方法解释
localStorage数据保存浏览器上,数据是持久化保存,不会因为浏览器关闭和过期时间的设定而自动删除数据,它的数据要手动设置删除数据
主要方法:
setItem(key,value) :设置key和value值保存数据
getItem(key) : 通过key来获取数据
clear():清除localStorage保存的所有数据
remove(key):清除指定key值的数据 -
通过一个demo练习来实现token使用过程,下面的前端代码使用原生xmlHttpRuest对象发起网络请求
<script>
//模拟的登录的时候获取的账号密码
var account=123;
var password="abc123";
var tokenText={
"account":account,"password":password};
//通过原生ajax来进行网络请求,创建网络请求对象XMLHttpRequest()
var xmlHttRequest = new XMLHttpRequest();
xmlHttRequest.open("post","http://localhost:80/SetToken",true);
//open() 方法就是创建网络请求,第一个参数是 请求方式我是用的是post方式,第二个参数是请求的后端网址,第三个就是是否使用异步(true)或同步(false)请求
//当xmlHttRequest状态码readyState发生改变 自动触发onreadystatechange事件
//注意后面方法不用小括号
xmlHttRequest.onreadystatechange=getData;
//先从本地获取token,如果本地token还没保存有,则token=null
var token=localStorage.getItem(</