html 登录状态检测,详解小程序用户登录状态检查与更新实例

这篇文章主要解决以下问题:用户每次登录小程序(包括第一次使用)及点击小程序的每个页面的时候,我们如何判断他当前的登录状态是否过期?如果过期,如何重新获取用户信息并发送至开发者服务器更新用户信息,以及设置新的用户登录状态?

将这个部分单独作为一篇文章有两个原因:

①wx.getUserInfo(OBJECT) 接口调整,废弃了以前直接获取用户信息的方法;

② 上篇文章授权、登录、session_key、unionId只梳理了登录流程而没有贴实际的代码,所以这篇文章以代码实现为主。

1. 代码逻辑分析

(1)用户登录态过期时间如何设置?

在上篇文章中也有提到过,用户登录态可以通过前端设置和后端设置两种方式进行控制。这里我们在前端进行控制,即利用wx.checkSession() 接口来判断session_key 是否过期来作为用户登录态是否过期的标志。如果过期了,则跳转到统一的登录页面引导用户点击按钮重新授权登录,重新登录之后session_key 会刷新,相当于在获取用户最新信息的同时重新设定了过期时间。

(2)onShow() 与onLoad()

小程序js 中有onShow 与onLoad 两种事件。两种事件的区别就在于onLoad 每次打开小程序只加载一次,跳转到其他页面再回来的时候这个事件就不会再触发。而onShow 则每次进入页面都会触发,所以我们在进入每个页面检查用户登录态是否过期的代码需要放在onShow 中。

(3)重新登录过程分析

如果用户登录态过期,则需要进行重新登录。登录过程在上篇文章中也有讲过。这里再简单梳理一下:前端引导用户点击按钮触发getUserInfo 获取最新用户信息 -> 前端调用wx.login() 获取code -> 前端将code 发送给后端获取openid 和seesion_key -> 后端写session 并返回对应session 的唯一标志 -> 前端存储这个唯一标志。

2. 代码实例

在每个页面的onShow 事件中添加以下代码来检查当前用户登录态是否过期:

wx.checkSession({

success: function () {

//session_key 未过期,并且在本生命周期一直有效

return ;

},

fail: function () {

// session_key 已经失效,需要重新执行登录流程

wx.navigateTo({

url: "/pages/authorize/index"

})

}

})

因为进入每个页面中都需要进行用户登录态是否过期的检查,所以需要有一个公共的授权页面,当检查不同过的时候,就跳转到这个授权页面引导用户重新进行授权,授权页面authorize 代码如下:

wxml

1、同意当前小程序获取我的微信头像;

2、同意当前小程序获取我的微信昵称等其他信息;

授权登录

wxss

page{

height: 100%;

}

.container{

background-color: #f5f5f9;

justify-content: initial;

}

.save-btn{

width: 690rpx;

height: 80rpx;

line-height: 80rpx;

text-align: center;

margin-top:30rpx;

border-radius: 6rpx;

box-sizing: border-box;

background-color: #e64340;

color:#fff;

}

js

// pages/authorize/index.js

var app = getApp();

let Domain = app.globalData.domain;

Page({

/**

* 页面的初始数据

*/

data: { },

/**

* 生命周期函数--监听页面加载

*/

onLoad: function (options) { },

/**

* 生命周期函数--监听页面初次渲染完成

*/

onReady: function () { },

/**

* 生命周期函数--监听页面显示

*/

onShow: function () { },

/**

* 生命周期函数--监听页面隐藏

*/

onHide: function () { },

/**

* 生命周期函数--监听页面卸载

*/

onUnload: function () { },

/**

* 页面相关事件处理函数--监听用户下拉动作

*/

onPullDownRefresh: function () { },

/**

* 页面上拉触底事件的处理函数

*/

onReachBottom: function () { },

/**

* 用户点击右上角分享

*/

onShareAppMessage: function () { },

bindGetUserInfo: function (e) {

// 获得最新的用户信息

if (!e.detail.userInfo){

return;

}

wx.setStorageSync('userInfo', e.detail.userInfo)

this.checkSessionAndLogin();

},

/*

这里使用openid 作为与后端session 连接的标志

检查是否存在openid,即之前是否登录过

如果登录过,检查session_key 是否过期

如果过期了,remove openid 重新执行login 并将用户信息发送到服务器端更新

如果没过期则返回

如果没登录过则执行login 并将用户信息发送到服务器更新

*/

checkSessionAndLogin: function () {

let that = this;

let thisOpenId = wx.getStorageSync('openid');

// 已经进行了登录,检查登录是否过期

if (thisOpenId) {

console.log('have openid')

wx.checkSession({

success: function () {

//session_key 未过期,并且在本生命周期一直有效

wx.navigateBack({});

},

fail: function () {

console.log('but session_key expired');

// session_key 已经失效,需要重新执行登录流程

wx.removeStorageSync('openid');

that.checkSessionAndLogin();

}

})

} else {

// 没有进行登录则先进行登录操作

console.log('do not have openid');

that.loginAndGetOpenid();

}

},

// 执行登录操作并获取用户openId

loginAndGetOpenid: function () {

console.log('do login and get openid');

let that = this;

wx.login({

success: function (res) {

if (res.code) {

wx.request({

url: Domain + '/user/wx_login',

data: {

code: res.code

},

success: function (res) {

res = res.data;

console.log(res)

// 保存openId,并将用户信息发送给后端

if (res.code === 0) {

wx.showModal({

title: 'set openid',

content: res.data,

})

wx.setStorageSync('openid', res.data);

that.sendUserInfoToServer();

} else {

wx.showModal({

title: 'Sorry',

content: '用户登录失败~',

})

}

}

})

}

}

})

},

sendUserInfoToServer: function () {

console.log('now send user info to server');

let userInfo = wx.getStorageSync('userInfo');

let thisOpenId = wx.getStorageSync('openid');

userInfo.openid =thisOpenId;

wx.request({

url: Domain + '/user/updateUser',

method: 'POST',

dataType: 'json',

data: userInfo,

success: function (res) {

res = res.data;

if (res.code === 0) {

wx.navigateBack({});

} else {

wx.showModal({

title: 'Sorry',

content: '同步信息出错~',

})

}

}

})

}

})

以上所述是小编给大家介绍的小程序用户登录状态检查与更新实例详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持! ad51e517755f8fd6a7ec83ced4ecfaf3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP转html静态页面后点击计数解决方法~AJAX 1、在你要统计点击次数的html页面,加入以下代码(这里count.asp与本文件同录目) <script type="text/javascript" src="count.asp?box=表名&id=文章ID"></script> '文章ID可读取数据库中的. 2、将下面的代码保存成count.asp <!--#include file="conn.asp"--> 数据库链接 hits=0 <% '================================================= '作 用:计数器,人气,box为表名,ID为ID... '================================================= dim rst,sqlt sqlt="select * from "&request.querystring("box")&" where ID="&request.querystring("id") set rst=server.CreateObject("adodb.recordset") rst.open sqlt,conn,1,3 if rst("ComeIP")=request.ServerVariables("REMOTE_ADDR") then rst("Hits")=rst("Hits")+1 rst("ComeIP")=request.ServerVariables("REMOTE_ADDR") rst.update end if %> hits=<%=rst("Hits")%> <% rst.close set rst=nothing %> document.write (hits); ***这是需要输出显示点击时要用的 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 用户登录状态的解决方法!!!~AJAX 1 在HTML页面调用,<script type="text/javascript" src="inc/user.asp"></script> 2 user.asp内容 <% '================================================= '作 用:显示用户登录表单 '================================================= u=Session("u") If u="" Then%> document.write("<a href=login.asp>登录<\/a>"); <%else%> document.writeln("<a href=uu.asp target=_blank><b><%=u%><\/b><\/a> | <a href=u.asp?u=<%=Server.URLEncode (u)%> target=_blank>我的空间<\/a> | <a href=logout.asp target=_blank>退出<\/a>") <%end if%>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值