收藏
回答

为什么wx.login获取的session_key会是过期的?

如果是连续使用wx.login获取的session_key 过5 到8分钟之后 再通过wx.login获取session_key

测试过程:

第一种方式:

删除手机上的小程序从开发工具扫码获取最新的小程序,然后通过wx.login 实现登录,连续删除,连续扫码重新打开小程序,然后点击wx.login实现登录

不会出现wx.login获取失效的session_key

第二种方式:

删除手机上的小程序 然后过3-5分钟 去重新扫码获取最新的小程序 =》 通过wx.login实现登录,第一次wx.login就会获取到失效的session_key,目前是必现的

有兄弟知道是什么原因吗 我没有使用checksession 直接使用的wx.login 在线等。。。


回答关注问题邀请回答
收藏

3 个回答

  • 我,秦始皇
    我,秦始皇
    02-23

    session_key 好像基本没啥用啊,官方文档罗哩罗嗦一堆登录流程,把人搞晕乎了。

    登录流程:

    微信用户启动小程序->调用wx.login获取到CODE->发送到小程序后台服务/后台服务再通过CODE/APPID/SECRET从微信服务器获取OPENID.SESSIONKEY,走到此处就完成了前端用户小程序登录到小程序后台服务器的逻辑,因为OPENID是微信用户和小程序ID(APPID)的唯一映射,后台服务器将此OPENID记录到数据库,表示此用户注册了/登录了。

    接下来小程序服务器自己生成一个TOKENID发给前端小程序来维护当前登录状态即可,前端小程序可以将此TOKENID简单保存为全局或者序列化保存到硬盘上,下次再启动时候读取。每次给小程序服务器发送请求时候绑定此ID认证当前用户的状态,整个过程无需SESSIONKEY的参与。

    即便为了完全,小程序后台给TOKENID设定一个有效时间,然后也就是给前台命令,要前台再次调用wx.login走一道上述流程。

    getuserinfor 好像也用不到,据说获取电话号需要用到,但99.99%的小程序都用不到这个功能吧,即便getuserinfor也很多用不到,唯一用到的就是openid,将微信用户和小程序运营系统绑定起来,用户的平台昵称头像什么的,不从微信平台获取也无所谓啊,自己搞一样的。

    既然有后台,肯定后台代码可以维护用户登录态,又不是多复杂。如果是无后台小程序(所有功能都在小程序包代码里面实现不访问后台),那些登录流程通通不需要,甚至getuserinfor授权都不一定需要。很奇怪还弄了判断session有效性的API,这玩意根本用不上啊。

    OPENID是唯一绑定的,小程序后台只要得到他,一切登录用户系统/客户服务都迎刃而解。

    而login连弹窗都没有,微信用户启动小程序后,app.js里面调用login,连接后台,后台处理返回token,一切流程都静悄悄解决了。

    02-23
    有用
    回复
  • 立᷉花᷉泷᷉
    立᷉花᷉泷᷉
    2023-10-11

    同遇到这个问题了,用户打开小程序调用wx.login,获取到的sessionKey后拿sessionKey解密失败了,第二次执行相同的流程就解密成功了,后来打日志发现两次sessionKey不一样。

    2023-10-11
    有用
    回复
  • 王华😄
    王华😄
    2022-05-19

    目前测试 使用 两次 wx.login 可以避免这个问题 也不知道什么原因 获取到的session_key是相同的 值

    2022-05-19
    有用
    回复
登录 后发表内容