2016-10-27 23 views
7

Tôi có dịch vụ đăng nhập thực hiện yêu cầu http (đến máy chủ phụ trợ php) và trả về cookie. Sau khi đăng nhập, cookie này cần được sử dụng trong tất cả các yêu cầu tiếp theo do khách hàng thực hiện.Đặt cookie yêu cầu angular2 http yêu cầu bài đăng

loginservice:

login(userCredentials:UserCredentials):Observable<any> {  
     this.request.ServiceType = "Connect" 
     this.request.SessionId = "sessionlessrequest" 
     this.request.Compression = "no" 
     this.request.Parameters = userCredentials; 
     let jsonRequest = JSON.stringify(this.request) 
     return this.http.post("http://localhost/request.php", "data="+ jsonRequest, 
      { headers: new Headers({ 
       'Content-Type': 'application/x-www-form-urlencoded' 
      }) 
      }).map((responseData) => { 
      this.apiResponse = responseData.json() as ApiResponse 
      if (!this.apiResponse.Error) { 
       this.sessionData.next(this.apiResponse.Data as UserSessionData) 
       this.sessionData.asObservable().share 
      } else { 
       console.log(this.apiResponse.ErrorMessage) 
      } 
      return null 
     }) 

Khi làm cuộc gọi này, phản ứng Cookie là như thế này:
getcookie

tôi thấy rằng tôi nhận được session_id từ session_start (trên máy chủ php của tôi)

Tôi khi thực hiện yêu cầu:

searchExams(searchObject:SearchObject):Observable<any>{ 
     let headers = new Headers(); 
     headers.append('Content-Type', 'application/x-www-form-urlencoded',) 
     let options = new RequestOptions({ headers: headers, withCredentials: true}); 
     this.request.ServiceType = ServiceType.SearchExams; 
     this.request.SessionId = this.userSessionData.SessionId; 
     this.request.Compression = "no" 
     this.request.Parameters = searchObject; 
     let jsonRequest = JSON.stringify(this.request) 
     console.log(jsonRequest) 
     return this.http.post("http://localhost/request.php", "data="+ jsonRequest, options 
      ).map((responseData) => { 
      this.apiResponse = responseData.json() as ApiResponse 
      if (!this.apiResponse.Error) { 
.... 

Tôi thấy rằng cookie yêu cầu hoàn toàn khác với cookie tôi nhận được từ máy chủ. Hơn nữa, nó luôn giống PHPSESSID postrequest

Tôi có cần đặt cookie yêu cầu không? Làm sao? Tôi đang thiếu gì?

Cảm ơn ....

+2

điều này có thể hữu ích: http://stackoverflow.com/questions/35602866/how-to-send-cookie-in-request-header-for-all-the-requests-in-angularjs2 – RomanHotsiy

Trả lời

15

Hãy thử điều này cho lần đăng nhập:

(...) 
return this.http.post("http://localhost/request.php", "data="+ jsonRequest, 
    { withCredentials: true, 
     headers: new Headers({ 
     'Content-Type': 'application/x-www-form-urlencoded' 
    }) 
    }).map(...) 

Và các yêu cầu khác:

(...) 
return this.http.post("http://localhost/request.php", "data="+ jsonRequest, 
         {withCredentials: true}).map(...) 

Về cơ bản, chỉ cần sử dụng withCredentialsoption thiết lập để true.

+0

Cảm ơn bạn! Quả thực là câu trả lời. –

+0

Cảm ơn bạn rất nhiều !!! – donlys

Các vấn đề liên quan