Heim >WeChat-Applet >Mini-Programmentwicklung >Die Lösung für das Problem, dass die Sitzungserhaltung des WeChat-Applets beim nächsten Mal fehlschlägt

Die Lösung für das Problem, dass die Sitzungserhaltung des WeChat-Applets beim nächsten Mal fehlschlägt

PHPz
PHPzOriginal
2017-04-03 17:54:517662Durchsuche

Alle HTTP-Anfragen des Applets verwenden die Methode wx.request({}), aber diese Methode generiert jedes Mal eine neue Sitzung und ist daher nicht für bestimmte Verwendungsszenarien geeignet (Sicherheitsüberprüfung, Sitzungsspeicherung, CSRF-Schutz) usw. Es wird einige Probleme geben. Beispielsweise ist in einer CSRF-geschützten Anwendung die CSRF-Datei, selbst wenn sie beim letzten Mal abgerufen wurde, bei der nächsten Anforderung ungültig.

Lösung

Schritt 1: Sitzungs-ID und CSRF abrufen und speichern

Die CSRF wurde als Beispiel erhalten, einfach und grob, wann Die Anwendung startet () Sie können die Cookie-Informationen für die erste Anfrage während onLaunch abrufen und lokal speichern. Sie können erzwingen, dass die Cookie-Informationen in Zukunft jedes Mal zum Anfrage-Header hinzugefügt werden.
Der Code lautet wie folgt:

//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;
                    }
                }
            }
        })
    }
})

Schritt 2: Anfordern anderer Schnittstellen basierend auf SessionId und CSRF

Von nun an können Sie jedes Mal, wenn Sie eine andere API-Schnittstelle anfordern, diese hinzufügen Fügen Sie es in den Anforderungsheader csrf und sessionId ein, um dieselbe Sitzung aufrechtzuerhalten.
Der Code lautet wie folgt:

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);
        }
    })
}

Das obige ist der detaillierte Inhalt vonDie Lösung für das Problem, dass die Sitzungserhaltung des WeChat-Applets beim nächsten Mal fehlschlägt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn