小程序
小游戏
企业微信
微信支付
扫描小程序码分享
调用wx.login,后台进行一系列操作后,返回小程序一个数据库自增的id,保存到小程序本地,没有过期时间。之后的业务逻辑都是用这个id与后台交互,这样就没有用到官方流程里的3rd_session之类的,请问这种方式可以吗?有什么不足吗?
6 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
缓存不通用就安全了,可以把 session id 长期缓存,以减少 wx.login 的次数。不过也不宜太长,否则昵称、头像更改会很难反映出来。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
刚试了切换账号登陆,两个账号的缓存不是互通的。
你说的这个登陆流程我之前试过,但是这样用户每次打开小程序都需要登陆一次,接口返回特别慢,我的方法是直接把用户id存到本地缓存,用户进来检查是否存在id再决定是否登陆
忽然想到一种非典型的应用场景:如果一部手机上微信用户注销后用另一个微信帐号登录,此时“小程序保存在本地的 id”会不会是同一份呢?如果是的话就有问题了,相当于两个不同的微信用户被当做了同一个小程序用户。
我在小程序里的做法是:小程序启动的时候调用一次 wx.login,在服务器端根据 openid 生成对应的 session id,在小程序端以内存变量的方式来缓存这个 session id,从不调用 wx.checkSession,只要缓存有效就不再调用 wx.login。
wx.login 的目的无非是拿到 code 并进而得到 openid, nickName, avatarUrl 这些,openid 是一成不变的,如果你也不在意昵称、头像的修改,那其实就没啥必要再次调用 wx.login,当然也就不需要 wx.checkSession 了。
@maq: 那这么说就不需要checksession这个方法了吧?
你这个 id 已经就是“官方流程里的3rd_session”了。
数据库自增的 id 不好,太容易伪造了,应该用一种可校验的加密字符串,比如 PHP 里可以用著名的 authcode()。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
缓存不通用就安全了,可以把 session id 长期缓存,以减少 wx.login 的次数。不过也不宜太长,否则昵称、头像更改会很难反映出来。
刚试了切换账号登陆,两个账号的缓存不是互通的。
你说的这个登陆流程我之前试过,但是这样用户每次打开小程序都需要登陆一次,接口返回特别慢,我的方法是直接把用户id存到本地缓存,用户进来检查是否存在id再决定是否登陆
忽然想到一种非典型的应用场景:如果一部手机上微信用户注销后用另一个微信帐号登录,此时“小程序保存在本地的 id”会不会是同一份呢?如果是的话就有问题了,相当于两个不同的微信用户被当做了同一个小程序用户。
我在小程序里的做法是:小程序启动的时候调用一次 wx.login,在服务器端根据 openid 生成对应的 session id,在小程序端以内存变量的方式来缓存这个 session id,从不调用 wx.checkSession,只要缓存有效就不再调用 wx.login。
wx.login 的目的无非是拿到 code 并进而得到 openid, nickName, avatarUrl 这些,openid 是一成不变的,如果你也不在意昵称、头像的修改,那其实就没啥必要再次调用 wx.login,当然也就不需要 wx.checkSession 了。
@maq: 那这么说就不需要checksession这个方法了吧?
你这个 id 已经就是“官方流程里的3rd_session”了。
数据库自增的 id 不好,太容易伪造了,应该用一种可校验的加密字符串,比如 PHP 里可以用著名的 authcode()。