微信小程序加载时先获取session_key登录状态


关键词

微信小程序 加载 session_key

摘要

本文介绍在微信小程序刚加载时如何获取session_key和openid等必要的信息。
session_key是相当于一个登录状态,应该在小程序加载的时候就获取。因为小程序在后续处理过程中会遇到一些和session_key相关的数据,如手机号、unionId、步行数据等。如果我们等到要用这些数据时,再去获取session_key,就会造成接口的重复调用,而且效率也比较低下。

获取session_key需要两步,一步是wx.login(),它会返回一个code。第二调用服务端的code2session接口,把第一步的code传入,则可以获得session_key、openid,甚至特殊情况下还能获取到unionId(如果关注了关联开放平台的公众号)。这个获取的过程是有点繁琐的,所以,把session_key获取回来放那里备用是正确的做法。

我们小程序常常会用到会员模块,而我们最常用的做法是通过openid来关联会员,这样就可以做到所谓的“微信自动登录”了。如上面所说,在获取openid时,其实需要和获取session_key一样的操作。所以说,与其一上来只获取openid,不如把openid和session_key一起获取了。一步操作,两份收获,何乐不为?!

session_key获取到了之后,就一直有效,一直可以用吗?不是的。微信小程序官方称,session_key是有一定的超时时间的,但具体多久,官方并没有公布。但官方提供了一下检测session_key是否能用的方法,即wx.checkSession()。在它的success回调中写入session_key尚能用的逻辑,在fail回调中写session_key已经超时的处理逻辑即可。

下面是封装好了的一个checkSession的Promise,它将获取回来的session_key、openid、unionId放到Storage存储中。

/**
 * 验证小程序session_key的Promise封装
 */
, checkSession: function(){
    return new Promise(function (resolve, reject) {

        //去登录
        var wxlogin = function(){
            wx.login({
                success: function (res) {
                    wxcode2session(res)
                }
            })
        }
        
        //获取session
        var wxcode2session = function(res){
            var data = {
                action: 'wxcode2session',
                code: res.code
            }
            wd.mina.request(data).then(res=>{
                console.log('wxcode2session return:');
                console.log(res.data);
                if( res.data.session_key != undefined ){
                    try {
                        console.log('checkSession():');
                        console.log(res.data);
                        wx.setStorageSync('session_key', res.data.session_key)
                        wx.setStorageSync('openid', res.data.openid)
                        wx.setStorageSync('unionid', res.data.unionid)
                        resolve()
                    } catch (e) {
                        reject('设置session失败')
                    }
                }else{
                    reject('获取session失败')
                }
            })
        }
        
        //检查是否存放了session_key
        try {
            var session_key = wx.getStorageSync('session_key')
            if (!session_key) {
                console.log('checkSession login-1');
                wxlogin()
            }else{
                
                //检查session是否过期
                wx.checkSession({
                    success () {
                        resolve()
                    },
                    fail () {
                        console.log('checkSession login-3');
                        wxlogin()
                    }
                })
            }
        } catch (e) {
            console.log('checkSession login-2');
            wxlogin()
        }

    })//eof-promise
}


有了这个函数之后,我们可以在app.js中去调用它,用它返回的信息去做其它的业务处理。


好了,关于微信小程序加载时先获取session_key登录状态,本文就介绍这么多,希望对大家有所帮助!

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权


如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:115085382!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« 微信小程序获取获取unionId的两种方法 微信小程序和公众号会员数据打通的设计思路 »