애플릿의 모든 HTTP 요청은 wx.request({}) 메서드를 사용하지만 이 메서드는 매번 새로운 세션을 생성하므로 특정 사용 시나리오(보안 확인, 세션 저장, CSRF 보호) 등 몇 가지 문제가 있을 것입니다. 예를 들어 CSRF로 보호되는 애플리케이션에서는 지난번에 CSRF를 획득했더라도 다음 요청에서는 유효하지 않게 됩니다.
csrf는 단순하고 조잡한 예시로 얻었습니다. 애플리케이션 시작() onLaunch 중에 첫 번째 요청에 대한 쿠키 정보를 얻고 이를 로컬에 저장할 수 있습니다. 나중에는 쿠키 정보가 요청 헤더에 항상 추가되도록 할 수 있습니다.
코드는 다음과 같습니다.
//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 및 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!