>위챗 애플릿 >미니 프로그램 개발 >다음 번 WeChat 애플릿의 세션 보존이 실패하는 문제에 대한 솔루션

다음 번 WeChat 애플릿의 세션 보존이 실패하는 문제에 대한 솔루션

PHPz
PHPz원래의
2017-04-03 17:54:517663검색

애플릿의 모든 HTTP 요청은 wx.request({}) 메서드를 사용하지만 이 메서드는 매번 새로운 세션을 생성하므로 특정 사용 시나리오(보안 확인, 세션 저장, CSRF 보호) 등 몇 가지 문제가 있을 것입니다. 예를 들어 CSRF로 보호되는 애플리케이션에서는 지난번에 CSRF를 획득했더라도 다음 요청에서는 유효하지 않게 됩니다.

해결책

1단계: sessionId와 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;
                    }
                }
            }
        })
    }
})

2단계: sessionId 및 csrf를 기반으로 다른 인터페이스 요청

이후에는 다른 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.