ホームページ  >  記事  >  WeChat アプレット  >  WeChatアプレットのセッション保持が次回失敗する問題の解決策

WeChatアプレットのセッション保持が次回失敗する問題の解決策

PHPz
PHPzオリジナル
2017-04-03 17:54:517630ブラウズ

アプレットのすべての HTTP リクエストは wx.request({}) メソッドを使用しますが、このメソッドは毎回新しいセッションを生成するため、特定の使用シナリオ (セキュリティ検証、セッション保存、CSRF 保護) などが発生します。ちょっとしたトラブル。たとえば、CSRF で保護されたアプリケーションでは、前回 CSRF を取得したとしても、次のリクエストでは無効になります。

解決策

ステップ 1: sessionId と csrf を取得して保存します

csrf は例として取得されていますが、これは単純かつ粗雑ですが、アプリケーションの起動時に () 実行中に最初のリクエストの Cookie 情報を取得できます。 onLaunch を実行してローカルに保存し、今後は毎回リクエスト ヘッダーに Cookie 情報を追加するだけです。
コードは次のとおりです:

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

ステップ 2: sessionId と csrf に基づいて他のインターフェイスをリクエストします

その後、別の API インターフェイスをリクエストするたびに、リクエスト ヘッダーに csrf と sessionId を追加して、同じセッションを維持できます。
コードは次のとおりです:

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

以上がWeChatアプレットのセッション保持が次回失敗する問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。