質問: Laravelを勉強中で、セッション共有しようと色々試したのですが、共有できずに困っています。 2つの問題が重なっている(?)のかちょっとわからず混乱してしまっており、教えてほしいです。 1つのサーバ内にサブドメインで分けた複数のアプリが有り、その全てでセッション共有をしようと思っています。 ``` directory/ + sub1.myhost.test (Laravel5.1が入っています) + sub2.myhost.test (ここもLaravel5.1が入っています) + sub3.myhost.test (ここにもLaravel5.1が入っています) + sub4.myhost.test (ここにもLaravel5.1が入っています) + session (sessionファイルをここに保存しようと思います) ``` (Laravelのサブドメインルーティングというのがあったのですが、それぞれの規模と内容が異なるため、別アプリにする方針ということで決定しました。無理であれば変更もやむを得ません。) 設定しているのは `/config/session.php` ``` 'driver' => 'file', 'files' => base_path('../session'), 'domain' => '.myhost.test', ``` `/.env` ``` APP_KEY=XXXX これを全てのアプリで同一にする ``` これらを設定しています。 例えば、sub2からsub1に対してajaxでPUTメソッドでリクエストを投げ (プリフライトリクエストがかかる為、.htaccessにて下記を設定しています。) ``` Header set Access-Control-Allow-Origin: * Header set Access-Control-Allow-Methods: PUT,DELETE ``` `request()->session()`メソッドの返り値`Illuminate\Session\Store`のIDを見るとリクエストのたびに変化してしまっています。ここが問題かなと思いつつも、どうすればよいかわからず、ご回答頂けますと幸いです。 よろしくお願いします!!
回答: 問題はクロスドメインでAjax通信を行っていることではないでしょうか。 クロスドメインのAjax通信でCookieを送信するためには、以下の全てを満たす必要があります。 * リクエストを受ける側で `Access-Control-Allow-Credentials: true` を送信する * 上記ヘッダと `Access-Control-Allow-Origin: *` は併用できないため、オリジンを明示する。 ※複数のオリジンを列挙することはできないので、毎回アクセス元の Origin を出力することになります。 * Ajaxリクエストを送る側では、XMLHttpRequest の `withCredentials` を設定 参考 * CORSリクエストでクレデンシャル(≒クッキー)を必要とする場合の注意点 - Qiita * HTTP アクセス制御 (CORS) | MDN