La solution au problème de l'échec de la conservation de la session de l'applet WeChat la prochaine fois

PHPz
Libérer: 2017-04-03 17:54:51
original
7614 Les gens l'ont consulté

Toutes les requêtes HTTP de l'applet utilisent la méthode wx.request({}), mais cette méthode générera une nouvelle session à chaque fois, elle n'est donc pas adaptée à des scénarios d'utilisation spécifiques (vérification de sécurité, sauvegarde de session, Protection CSRF), etc. Il y aura quelques problèmes. Par exemple, dans une application protégée par CSRF, même si le CSRF a été obtenu la dernière fois, il ne sera pas valide lors de la prochaine requête.

Solution

étape 1 : Récupérer le sessionId et le csrf et les enregistrer

Le csrf a été obtenu à titre d'exemple, simple et brut, lorsque l'application démarre () Vous pouvez obtenir les informations sur les cookies pour la première requête lors du lancement et les enregistrer localement. Vous pouvez forcer l'ajout des informations sur les cookies à l'en-tête de la requête à chaque fois dans le futur.
Le code est le suivant :

//app.jsApp({
    onLaunch:function(){
        this.initSession();
    },
    initSession:function(){
        var that = this;        // step one:get cookie
        wx.request({
            url:'https://my.domain.com/open-api/cookie',
            header:{'Content-Type':'application/x-www-form-urlencoded'},
            method:'GET',
            success:function(res){
                for(let cookie of res.data){                    //这里我仅保存了sessionid,根据需要,也可以保存cookie的其它信息。
                    if(cookie.name === 'JSESSIONID') {
                        that.globalData.sessionId=cookie.value;
                        wx.request({
                            url:'https://my.domain.com/open-api/csrf',
                            header:{'Content-Type':'application/x-www-form-urlencoded','Cookie':'JSESSIONID='+that.globalData.sessionId},
                            method:'GET',
                            success:function(res){
                                that.globalData.csrf=res.data;
                            }
                        })                        break;
                    }
                }
            }
        })
    }
})
Copier après la connexion

étape 2 : Demander d'autres interfaces basées sur sessionId et csrf

Désormais, chaque fois que vous demandez une autre interface api, vous pouvez ajouter dans l'en-tête de requête csrf et sessionId pour conserver la même session.
Le code est le suivant :

doSth:function(){
    var that = this;
    wx.request({
        url:'my.domain.com/api/some-thing',        //这里的CSRF的key(CSRF-TOKEN)具体写什么,根据各位自己的程序设置来写
        header:{'Content-Type':'application/x-www-form-urlencoded','Cookie':'JSESSIONID='+that.globalData.sessionId,'CSRF-TOKEN':that.globalData.csrf},
        method:'POST',
        data:paramdata,
        success:function(res){
            doSomething(res.data);
        }
    })
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!