localStorage PC浏览器(永久保存)
sessionStorage PC浏览器(关闭窗口就删除数据)
操作
1、localStorage.setItem(key,value) 保存数据
2、localStorage.getItem(key) 获取数据
3、localStorage.removeItem(key) 删除数据
4、localStorage.clear() 删除全部数据
同理 sessionStorage
话不多说,把你10年前onbeforeunload发送一个请求的事件贴出来看看,我倒想知道你是不是业界大拿。或者你直接贴出解决方案的代码让我信服,别吹嘘,也别争了,这里不是吵架的地方。window.onbeforeunload=
function(){
//这样做如果确定倒没事,如果取消怎么解?
document.cookie
=
"user=admin&pwd=123"
return
"确定可就退出了?"}
微信小程序退出账号的前提条件是用户已登陆,且在前端页面和后端服务已记录了用户的登陆状态。退出登陆的操作,相当于清除用户登陆状态的操作。
因此微信小程序实现退出账号的具体流程包括以下几点:
1、用户登陆操作:
(1)微信小程序调用wx.login获取登录凭证(code)。
(2) 将code传递到后端服务,通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid),并生成与用户一一对应的token值,保存起来,用作用户身份的校验,同时返回给微信小程序客户端。
(3)微信小程序获取到token令牌,保存到本地,即可作为已登陆状态的凭证。
前端代码为:
const login = function () {
wx.showLoading({ title: '登陆中' })
wx.login().then(res =>{
if (res.errMsg === 'login:ok') {
Api.login(res.code).then(data =>{
wx.hideLoading()
wx.setStorageSync('token', data) })
}})}
后端服务代码为:
async login(jsCode) {
const { ctx, app } = this
const APPID = app.config.miniProgram.appId
const SECRET = app.config.miniProgram.appSecret
const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${SECRET}&js_code=${jsCode}&grant_type=authorization_code`
const res = await ctx.curl(url, { method: 'GET', dataType: 'json' })
const openid = res.data.openid
const session_key = res.data.session_key
const str = await app.redis.get(openid)
if (str &&JSON.parse(str).accessToken) { // 已登陆
const oldAccessToken = JSON.parse(str).accessToken
await app.redis.del(oldAccessToken)// 删除token,实现单点登陆
await app.redis.del(openid)}
const accessToken = await ctx.helper.createWxToken(openid, session_key)// 生成新的token
return accessToken}
2、退出登陆操作:
(1)点击“退出账号”按钮,调用ajax请求后端退出登陆接口并传递用户token,若退出成功,则清除当前用户登陆状态和token信息。
(2)刷新当前页面数据,清除页面上的用户信息。
(3)后端API接收到客户端传递的用户token,查询数据库判断用户是否已登陆,若登陆,则删除或将token置为无效。
前端代码为:
const logout = function () {
wx.showLoading({ title: '退出登陆中' })
const token = wx.getStorageSync('token')
Api.logout({ token: token }).then(data =>{
wx.hideLoading()
wx.removeStorageSync('token')
refreshPageData()
})}
后端代码为:
async logout(accessToken) {
const { ctx, app } = this
const userId = await app.redis.get(accessToken)
if (!userId) ctx.throw(400, '登陆状态已失效')
await app.redis.del(userId)// 删除userId
await app.redis.del(accessToken)// 删除token
}
扩展资料:
1、微信小程序账号密码登陆和授权登陆后,token保存在loacalStore中,在每次加载接口时,携带上token令牌,向服务端传递已登陆的状态。
2、微信小程序退出登陆需清除登陆状态,当调用微信小程序API中的wx.login()执行登陆操作,通过登陆接口获取到code后需调用后端接口生成token, 由于安全问题,勿在前端使用密钥生成。在执行退出登陆操作时,需清除localStorage 中缓存的token及用户信息,并刷新当前页面数据。