위 챗 애플 릿 백 엔 드 가 session 을 유지 할 수 없 는 원인 및 해결 방법 문제

이전에 위 챗 애플 릿 프로젝트 를 접 하지 않 았 습 니 다.jQuery 라 이브 러 리 를 사용 하 는 ajax 에서 정상 적 이 고 서버 도 세 션 상 태 를 유지 할 수 있 습 니 다.wx.request 를 사용 하 는 중 세 션 이 유지 되 지 않 는 것 을 발 견 했 습 니 다.처음에는 서버 pp.ini 설정 오류 인 줄 알 았 습 니 다.
코드 에 session 추가start()또는 session.auto 오픈start()
  • session.save 확인path 설정 이 정확 하고 읽 기와 쓰기 권한 이 있 습 니 다
  • 라 는 상황 에서 도 효과 가 없다.이상 의 방법 은 대부분의 경우 페이지 리 셋 세 션 이 문 제 를 유지 할 수 없 음 을 해결 할 수 있 습 니 다.
    하지만 설치 후 에는 효과 가 없다.
    마지막 으로 jQuery 였 던 ajax(브 라 우 저 일 것 입 니 다)는 쿠키 를 자동 으로 유지 하고 wx.request 는 그렇지 않 습 니 다.
    이것 은 session 과 쿠키 의 관계 및 보존 메커니즘 에 관 한 문제 입 니 다.
    우선,쿠키 는 클 라 이언 트 에 저 장 된 정보 이 고 session 은 서버 에 저 장 된 정보 입 니 다.
    그 서버 는 단독 사용자 의 session 을 어떻게 식별 하고 한 번 의 연결 에서 이 사용자 가 어떤 session 에 속 하 는 지 어떻게 판별 합 니까?
    기 제 는 서버 가 sessionid 를 생 성하 여 사용 자 를 식별 하고 해당 하 는 쿠키 에 이 sessionid 값 을 가 져 오 는 것 입 니 다.사용자 가 다음 요청 을 할 때 요청 헤더 에 쿠키 도 서버 가 사용자 세 션 을 식별 할 수 있 도록 이 sessionid 를 가 져 가 야 합 니 다.그 중에서 판별 체제 와 session 저장 체 제 는 서열 과 반 직렬 화 와 관련 되 고 session.savepath 에 서 는 모든 session 에 파일 을 따로 만 듭 니 다.파일 이름 은 sessionid 이 고 내용 은 이번 세 션 에 저 장 된 session 입 니 다.
    한편,wx.request 는 요청 에 쿠키 를 가 져 오지 않 기 때문에 요청 할 때마다 서버 에 새로운 sessionid 를 할당 하여 세 션 이 유지 되 지 못 하 는 결 과 를 초래 합 니 다.
    해결 방법
    wx.request 에 이 sessionid 를 가 져 오 거나 wx.request 를 다시 밀봉 해 야 합 니 다.
    2019/9/27 업데이트:
    스스로 header 를 유지 하고 wx.request 에 쿠키 를 저장 하고 보 냅 니 다.
    우선 app.js 에 전역 변 수 를 저장 하고 header 를 저장 합 니 다.
    
    globalData: {
      header: {
       "content-type": "application/x-www-form-urlencoded",
       'Cookie': ''
      }
     }
    그리고 매번 wx.request 의 요청 매개 변수 에 이 header 를 가 져 옵 니 다.
    모든 응답 에서 Cookie 를 header 에 감지 하고 저장 합 니 다.
    
    wx.request({
       url: 'http://localhost/loginDemo/server/loginTest.php',
       //     
       header: getApp().globalData.header,
       method: 'POST',
       data: {
        action: "login",
        user: that.data.userInfo.nickName
       },
       success: function(res){
        console.log(res)
        //dosometing...
        //          set-cookie ,         cookie,        session id
        if (res.header["Set-Cookie"] != null) {
         //  cookie
         getApp().globalData.header["Cookie"] += res.header["Set-Cookie"]
        }
       },
       fail: function (res) {
        console.log(res)
        wx.showToast({
         title: '       ',
         icon: "none"
        })
       }
      })
    테스트

    첫 번 째 요청 은 로 컬(header)에 쿠키 에 저 장 된 PHPSESSIONID 가 없습니다.

    첫 번 째 응답 요청,서버 는 Set-Cookie 로 돌아 가 phopsessionID 를 가 져 옵 니 다.
    스스로 유지 하고 header 에 저장 합 니 다.

    두 번 째 요청 은 헤더 가 있 고 session ID 가 있 습 니 다.

    두 번 째 요청 응답 서버 에서 session 을 감지 하고 세 션 을 복원 하 며 새 세 션 을 만 들 지 않 습 니 다.
    이상 의 방법 은 기본적으로 위 챗 애플 릿 Cookie 문 제 를 해결 할 수 있 습 니 다.더 많은 관련 애플 릿 백 엔 드 에서 session 내용 을 유지 할 수 없습니다.예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기