本文目录一览:
java中 TOKEN的概念
token 你可以把他当做一个令牌,当第一次访问时设置一个令牌保存,一般我们保存在session中,当启动令牌时,那么就去检测令牌是否一致,然后销毁令牌或者重置令牌,这样第二次再用次令牌访问时,就会不一致了,直接提示重复提交了
请教Java 登录token的用法
jsp生成表单时,
1 在表单中插入一个隐藏input字段,该字段就是保存在页面端的token字符串,同时把该字符串存入session中。
2 用户提交表单时,会一并提交该隐藏的token字符串。
3 在服务器端,查看下是否在session中含有与该token字符串相等的字符串。
3 .1 如果有,那么表明是第一次提交该表单,然后删除存放于session端的token字符串,再做正常业务逻辑流程;(注意此处已经将session端的token字符串 删除)
3.2 如果没有,那么表示该表单被重复提交,做非正常流程处理,可以警告提示也可以什么也不做(第一次提交后session端的token字符串已删除)
js清除所有网站token
本地存储对比:
sessionStorage,关闭窗口就被清除;
localStorage,一直存在直到手动删除;
cookie,设置有效期,可以直接实现标题的需求
今天不想多说话,直接贴上代码:
//判断是否支持 比如浏览器开启了隐私模式var isCookie = () = { return navigator.cookieEnabled;};//存储function setCookie(cname, cvalue, exdays = 0) { cvalue = encodeURIComponent(JSON.stringify(cvalue)); if (exdays 0) { var d = new Date().getTime() + exdays * 24 * 3600 * 1000 + 8 * 3600 * 1000; var expires = "expires=" + new Date(d).toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } else { document.cookie = cname + "=" + cvalue + ";" + ";path=/"; }}//获取function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(";"); for (var i = 0; i ca.length; i++) { var c = ca[i]; while (c.charAt(0) == " ") { c = c.substring(1); } if (c.indexOf(name) == 0) { let d = c.substring(name.length, c.length); return JSON.parse(decodeURIComponent(d)); } } return "";}//获取 通过正则// function getCookie(name) {// var arr,// reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");// if ((arr = document.cookie.match(reg))) {// return JSON.parse(decodeURIComponent(arr[2]));// } else {// return null;// }// }//删除function deleteCookie(name) { var date = new Date(); date.setTime(date.getTime() - 1); var delValue = getCookie(name); if (delValue) { document.cookie = name + "=" + delValue + ";expires=" + date.toGMTString(); }}
使用示例:
//定义keyconst tk = "tk2020";const uk = "uk2020";//保存setCookie(tk, "14332239527007001", 0);setCookie(uk, { id: 1, name: "以气御码" }, 0);//获取let token = getCookie(tk);let user = getCookie(uk);console.log(token);console.log(user);
当使用setCookie时,传0或不传,表示关闭浏览器后就被清除,截图预览:

当登录的信息存储为这种形式,可以实现关闭浏览器,就清除登录信息。也可以再配合登录有效期,总不能“只要不关浏览器,就不退出登录了”。
文档:
MDN Cookie()W3c Cookie()菜鸟教程 Cookie()
登录时对于token的处理
在前后端完全分离的情况下,Vue项目中实现token验证大致思路如下:
1、用户输入账号密码,前端调后端的登陆接口,发送用户名和密码,
2、后端收到请求,验证用户名和密码,验证通过后(即登录成功),后端返回token给前端;
3、前端拿到token,将token存储到localStorage和vuex中,并跳转路由页面;
4、前端每次跳转路由,都要判断 localStroage 中有无 token ,没有就跳转到登录页面,有则跳转到对应路由页面( 通过router.beforeEach((to, from, next)={.....}))
5、每次调后端接口,都要在请求头中加上token;
6、后端判断请求头中有无token,有token,就拿到token并验证token,验证成功就返回数据,验证失败(例如:token过期)就返回编码401(编码由前台和后台约定好),请求头中没有token也返回编码401;
7、如果前端拿到状态码为401,则清除token信息并跳转到登录页面,并弹框提示用户当前缺少token或者token已失效,请重新登录;
一、调登录接口成功,在回调函数中将token存储到localStorage和vuex中
login.vue
store文件夹下的index.js
二、路由导航守卫
main.js
三、请求头加token,如果前端拿到状态码为401,就清除token信息并跳转到登录页面