symfonyでこれが可能かどうかわかりませんので、質問がありました。高レベルのシナリオは次のとおりリクエストヘッダからセッションIDを適用
- (symfonyにおいて内蔵)APIに要求が応答本体
- にセッションIDを要求元に返す必要があり戻さセッションIDを含める必要がありますその後続の要求のためにそのヘッダに
- 要求ヘッダーがセッションIDを持っている場合、APIは、チェックする必要があり、それがない場合、それはsymfonyのセッションで、そのセッションを設定する必要があり
、私は、ブラウザのインスタンスのための2つのRESTクライアントを使用しています:
- ポストマン(クローム)
- HttpRequester(Firefoxの)
ここでは、私がやったコードのアプローチです:
郵便集配人からの要求:
POST http://path.domain/api/url/
Content-Type: application/json
{
"key": "value"
}
HTTPFoundationセッションを使用して、私はしてセッションを設定します。応答で、ここではそれを返し、その後
$session = new Session();
$session->set('session-id', $session->getId());
$session->set('timestamp', time());
:今
200 OK
Content-Type: application/json
{
"session-id": "1a69f956b8efc5ab465356e3257a3230",
"timestamp": 1487850859
}
、別のインスタンスから別の応答をシミュレートするために、私はHttpRequesterを使用しますが、とセッションIDヘッダに:
POST http://path.domain/api/url/
Content-Type: application/json
{
"key": "value",
"session-id": "1a69f956b8efc5ab465356e3257a3230"
}
異なる要求インスタンスを有することにより、私は期待していそのsymfonyの意志遺伝子レートの新しいセッション(新しいタイムスタンプ値)。しかし私の場合は、セッションIDをに設定してリクエストヘッダーに設定したいので、以前の応答で返されたタイムスタンプにアクセスできます。
私はカーネルイベントを作成しました。リクエストを傍受し、リクエストがのセッションIDを持っていれば、セッションの設定を行います。私はこれを行う場合
// Get all PHP global variables
$request = Request::createFromGlobals();
// Check if the request
if ($request->headers->has('session-id')) {
$session = new Session();
$session->setId($request->headers->get('session-id'));
}
はしかし、私はエラーを取得する:
"error": {
"code": 500,
"message": "Internal Server Error",
"exception": [
{
"message": "Cannot change the ID of an active session",
"class": "LogicException",
...
私は何を逃したのですか?これは可能ですか?私はそこget
機能があるが、これは仕事をしたりしません場合、私は知らないので、私は、通常のセッションを使用していないthe documentationで見た
if ($request->headers->has('session-id')) {
$session = new Session();
$session->start();
$sess = $session->get('session-id');
$session->set('session-id', $sess);
...
}
:
[このチュートリアル](http://symfony.com/doc/current/security/api_key_authentication.html)に従ってトークン経由で認証を管理することは考えましたか?これが私のREST APIでの認証方法です。 – Jeet
ええ、JWT認証とステートレスファイアウォールを調べてください – mblaettermann
そこにユーザ名がありますが、私はそれを必要としません。私が今思うのは、別のインスタンスからセッションを取得する柔軟性を持たせることです。 –