アプレットのすべての HTTP リクエストは wx.request({}) メソッドを使用しますが、このメソッドは毎回新しいセッションを生成するため、特定の使用シナリオ (セキュリティ検証、セッション保存、CSRF 保護) などが発生します。ちょっとしたトラブル。たとえば、CSRF で保護されたアプリケーションでは、前回 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; } } } }) } })
その後、別の 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 サイトの他の関連記事を参照してください。