(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の応答は次のようになります。
(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です
リクエストCookieを設定する必要がありますか?どうやって?何が欠けていますか?
ありがとう...
ログインのためにこれを試してください:
(...)
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(...)
基本的には、withCredentials
option をtrue
に設定して使用します。