web-dev-qa-db-ja.com

リクエストCookieの設定angular2 http postリクエスト

(phpバックエンドサーバーへの)httpリクエストを実行し、Cookieを返すログインサービスがあります。ログイン後、このCookieは、クライアントが行う以降のすべてのリクエストで使用する必要があります。

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
        })

この呼び出しを行うと、Cookieの応答は次のようになります。
getcookie

(phpサーバー上の)session_startからsession_idを取得していることがわかります

私はリクエストをするとき:

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) {
....

リクエストCookieは、サーバーから取得したものとはまったく異なることがわかります。さらに、それは常に同じPHPSESSIDです postrequest

リクエストCookieを設定する必要がありますか?どうやって?何が欠けていますか?

ありがとう...

7
Maniac_1979

ログインのためにこれを試してください:

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

そして他の要求:

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

基本的には、withCredentialsoptiontrueに設定して使用します。

19
AArias