iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >微信小程序登录会话密钥session失效怎么解决
  • 152
分享到

微信小程序登录会话密钥session失效怎么解决

2023-06-30 05:06:02 152人浏览 薄情痞子
摘要

本篇内容主要讲解“微信小程序登录会话密钥session失效怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序登录会话密钥session失效怎么解决”吧!一、登录会话密钥 sessi

本篇内容主要讲解“微信小程序登录会话密钥session失效怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习微信小程序登录会话密钥session失效怎么解决”吧!

    一、登录会话密钥 session_key 有效性

    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html

    开发者如果遇到因为 session_key 不正确而校验签名失败或解密失败,请关注下面几个与 session_key 有关的注意事项。

    • wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。开发者应该在明确需要重新登录时才调用 wx.login,及时通过 auth.code2Session 接口更新服务器存储的 session_key。

    • 微信不会把 session_key 的有效期告知开发者。我们会根据用户使用小程序的行为对 session_key 进行续期。用户越频繁使用小程序,session_key 有效期越长。

    • 开发者在 session_key 失效时,可以通过重新执行登录流程获取有效的 session_key。使用接口 wx.checkSession可以校验 session_key 是否有效,从而避免小程序反复执行登录流程。

    • 当开发者在实现自定义登录态时,可以考虑以 session_key 有效期作为自身登录态有效期,也可以实现自定义的时效性策略。

    二、解决登录session_key 的问题

    通过wx.checkSession判断是否过期。

    在生命周期中onLaunch调用一次写的登录方法

    在其他地方通过wx.checkSession判断是否过期,如果过期再次调用登录方法,更新session_key 

    案例:解决session_key 过期问题,发送个人信息后台解密

    # app.js中://app.jsApp({    onLaunch: function () {    // 登录    this.my_login()  },  my_login:function(){    let that = this    wx.login({      success: res => {        // 发送 res.code 到后台换取 openId, sessionKey, uNIOnId        console.log(res.code)        wx.request({          url: that.globalData.baseurl + "login/",          data: { "code": res.code },          method: "POST",          success(e) {            wx.setStorageSync('token', e.data.data.token)          }        })      }    })  },  globalData: {    userInfo: null,    baseurl:"Http://127.0.0.1:8000/"  }})# 页面js中:// 先拿到app全局对象const app = getApp()user1:function (e) {    wx.getSetting({      success(res) {        if (res.authSetting['scope.userInfo']) {          wx.getUserInfo({            success: (res) => {              console.log("res",res) //这个res就是用户的信息              // 将数据发送后端              wx.request({                // 发送iv,encryptedData                url: app.globalData.baseurl + "getinfo/",                data:{                  iv:res.iv,                  encryptedData: res.encryptedData,                  token:wx.getStorageSync("token")                },                method:"POST",                success:(e) =>{                  console.log('后台返回的数据',e)                }              })            },          })          // 判断是否过期          wx.checkSession({            success() {              //session_key 未过期,并且在本生命周期一直有效            },            fail() {              // session_key 已经失效,需要重新执行登录流程              app.my_login() // 重新登录,更新session_key              wx.getUserInfo({                success: (res) => {                  console.log("res啦啦啦", res) //这个res就是用户的信息                  // 将数据发送后端                  wx.request({                    // 发送iv,encryptedData                    url: 'url',                  })                },              })            }          })        }      }    })  }

    后端解密信息,存入数据库

    # 登录:略# urls.pypath('getinfo/', user.Info.as_view()),# user.pyfrom Django.core.cache import cachefrom api.models import Wxuserfrom api.wx import WXBizDataCryptfrom api.my_ser import wx_user_serfrom rest_framework.response import Responseclass Info(APIView):    def post(self, request):        param = request.data        if param['iv'] and param.get("token") and param.get("encryptedData"):            iv = param['iv']            encryptedData = param.get("encryptedData")            session_key_openid = cache.get(param.get("token"))            if session_key_openid:                sessionKey, openid = session_key_openid.split("&")                # 解密                user_info = WXBizDataCrypt.WXBizDataCrypt.get_info(sessionKey, encryptedData, iv)                print('user_info', user_info)                save_data = {                    "name": user_info['nickName'],                    "avatar": user_info['avatarUrl'],                    "language": user_info['language'],                    "province": user_info['province'],                    "city": user_info['city'],                    "country": user_info['country'],                }                # 把用户信息存入数据库                Wxuser.objects.filter(openid=openid).update(**save_data)                # 测试:把童虎信息返回给前台                user = Wxuser.objects.filter(openid=openid).first()                user = wx_user_ser(instance=user, many=False).data                return Response({                    "status": 0,                    "msg": "ok",                    "data": user                })            else:                return Response({"code": 2, "msg": "无效的token"})        else:            return Response({"code": 1, "msg": "缺少参数"})            # 检测对字典排序# WXBizDataCrypt文件,下载的解密,然后二次封装的import base64import JSONfrom Crypto.Cipher import AESfrom api.wx import settingsclass WXBizDataCrypt:    def __init__(self, appId, sessionKey):        self.appId = appId        self.sessionKey = sessionKey    def decrypt(self, encryptedData, iv):        # base64 decode        sessionKey = base64.b64decode(self.sessionKey)        encryptedData = base64.b64decode(encryptedData)        iv = base64.b64decode(iv)        cipher = AES.new(sessionKey, AES.MODE_CBC, iv)        decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))        if decrypted['watermark']['appid'] != self.appId:            raise Exception('Invalid Buffer')        return decrypted    def _unpad(self, s):        return s[:-ord(s[len(s)-1:])]    @claSSMethod    def get_info(cls,sessionKey,encryptedData,iv):        # appId = settings.AppId        # sessionKey = sessionKey        # encryptedData = encryptedData        # iv = iv        #        # # 实例化这个类 WXBizDataCrypt        # pc = cls(appId, sessionKey)        # return pc.decrypt(encryptedData, iv)        # 简化为:        return cls(settings.AppId, sessionKey).decrypt(encryptedData, iv)

    mysql数据库存表情设置

    微信小程序登录会话密钥session失效怎么解决

    Mysql数据库类型

    配置:默认是utf8,3个字节。表情是4个字节

    需要设置:'OPTIONS': {'charset': 'utf8mb4'}

    import pymysqlpymysql.install_as_MySQLdb()DATABASES = {    'default': {        'ENGINE': 'djanGo.db.backends.mysql',        'NAME': 'python13',        'USER': 'root',        'PASSWord': '123',        'HOST': 'localhost',        'PORT': 3306,        'OPTIONS': {'charset': 'utf8mb4'},    }}

    三、后端,如何解析wx.getUserInfor中的用户信息。

    1 我们用encryptedData和iv,进行解密,必须要用到session_key,所以用必须是登入状态。

    2 但是session_key是有有效期。而且session_key的有效期,不是一个固定值,他是通过用户行为来决定,session_key的有效期时间。

    3 但是我们可以通过wx.checkSession来判断有没有过期。

    4 保证session_key没有过期的情况下。我们将iv,encryptedData,token(登入凭证)发送到后端.

    5 后端使用官方提供的sdk,进行解密。

    6 解密成功以后保存到数据,数据库的字符集一定要是utf8mb4,才能保存表情包

    如官方的sdk没有Crypto包用下面的方法解决:

    pip install pycryptodome

    到此,相信大家对“微信小程序登录会话密钥session失效怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: 微信小程序登录会话密钥session失效怎么解决

    本文链接: https://www.lsjlt.com/news/327495.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 微信小程序登录会话密钥session失效怎么解决
      本篇内容主要讲解“微信小程序登录会话密钥session失效怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序登录会话密钥session失效怎么解决”吧!一、登录会话密钥 sessi...
      99+
      2023-06-30
    • 微信小程序登录会话密钥session失效解决方案
      目录一、登录会话密钥 session_key 有效性二、解决登录session_key 的问题案例:解决session_key 过期问题,发送个人信息后台解密后端解密信息,存入数据库...
      99+
      2024-04-02
    • 微信小程序怎么实现登录会话效果
      这篇文章主要介绍了微信小程序怎么实现登录会话效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么实现登录会话效果文章都会有所收获,下面我们一起来看看吧。背景微信小程序的使用可以快速的基于场景进行用户...
      99+
      2023-06-26
    • 微信小程序登录不上如何解决
      这篇文章主要介绍了微信小程序登录不上如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序登录不上如何解决文章都会有所收获,下面我们一起来看看吧。微信小程序授权失败,一般会有以下情况:误将微信公众授权...
      99+
      2023-06-26
    • 通过大白话理解微信小程序的授权登录
      目录前言大白话讲步骤:1. 前端写一个button 按钮点击调用一个方法2. 前端点击button后,该调用的该方法里面写wx.login( ) 方法,这时候你会获得一些数据3. 后...
      99+
      2022-12-08
      微信小程序授权登录怎么实现 微信小程序重新授权登录 微信小程序授权登录代码
    • 怎么授权登录微信小程序
      本篇文章为大家展示了怎么授权登录微信小程序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。授权登录的基本流程上图是微信小程序官网提供的授权登录基本流程图,这里我只从前端开发的角度来讲解一下该流程。通过...
      99+
      2023-06-08
    • 微信小程序scroll-x失效怎么办
      小编给大家分享一下微信小程序scroll-x失效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!失效的scroll-x在微信...
      99+
      2024-04-02
    • 微信小程序中怎么实现登录
      今天小编给大家分享一下微信小程序中怎么实现登录的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。业务流程:首先需要一个按钮触发事...
      99+
      2023-07-02
    • 微信小程序调用moveToLocation失效怎么办
      这篇文章给大家分享的是有关微信小程序调用moveToLocation失效怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。上图所示,mapUpdated表示地图加载完成后,再初...
      99+
      2024-04-02
    • 微信小程序Java登录流程怎么实现
      这篇“微信小程序Java登录流程怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“微信小程序Java登录流程怎么实现”文...
      99+
      2023-06-26
    • 微信小程序拉取广告失败怎么解决
      检查广告位配置:确保在小程序管理后台正确配置了广告位,并且广告内容符合微信小程序广告政策。 检查网络连接:确保手机或网络环境...
      99+
      2024-04-09
      微信小程序
    • 微信小程序API怎么实现登录凭证
      这篇文章主要介绍了微信小程序API怎么实现登录凭证的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序API怎么实现登录凭证文章都会有所收获,下面我们一起来看看吧。wx.login(OBJECT)调用接口获...
      99+
      2023-06-26
    • 微信小程序开发登录验证怎么实现
      本篇内容主要讲解“微信小程序开发登录验证怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序开发登录验证怎么实现”吧!需求描述:对于部分页面添加登录验证,用户未登录的情况下,进入页面...
      99+
      2023-06-26
    • 微信小程序ssl证书安装无效怎么解决
      如果您的微信小程序SSL证书安装无效,您可以尝试以下解决方案:1. 确认证书是否正确安装:检查证书的有效期和证书链是否正确安装。2....
      99+
      2023-06-04
      微信小程序ssl证书 微信小程序 ssl证书
    • 微信小程序运行环境加载失败怎么解决
      微信小程序运行环境加载失败可能是由于网络连接问题、服务器故障或者小程序代码问题引起的。要解决这个问题,可以尝试以下方法: 检查网...
      99+
      2024-03-15
      微信小程序
    • 微信小程序new Date()方法失效问题怎么办
      这篇文章将为大家详细讲解有关微信小程序new Date()方法失效问题怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。iOS系统对js中的new Date()方法有格...
      99+
      2024-04-02
    • uniapp开发H5打包微信小程序样式失效如何解决
      本文小编为大家详细介绍“uniapp开发H5打包微信小程序样式失效如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“uniapp开发H5打包微信小程序样式失效如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
      99+
      2023-07-05
    • 微信小程序怎么自定义用户登录弹窗
      这篇文章主要介绍“微信小程序怎么自定义用户登录弹窗”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么自定义用户登录弹窗”文章能帮助大家解决问题。view<button &n...
      99+
      2023-07-02
    • 浅析uniapp微信小程序登录系统错误的解决办法
      随着微信小程序的火热发展,越来越多的开发者开始使用uniapp框架来开发自己的小程序。但是遇到问题的时候,开发者也开始苦恼起来。本篇文章主要介绍uniapp微信小程序登录系统错误的解决办法。1.错误提示当我们在使用uniapp框架开发微信小...
      99+
      2023-05-14
    • 微信小程序triggerevent没触发怎么解决
      当微信小程序中的triggerevent没有触发时,可能是以下几个原因导致的: 事件绑定错误:首先要检查代码中的事件绑定是否正确...
      99+
      2024-02-29
      微信小程序
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作