質問: "X-CSRF-Token"; ``` を記載してあり、PHP側でapiを作成しており ``` if (!isset($_SESSION)) { session_start([ 'cookie_samesite'=>'None', 'cookie_secure'=>true ]); } ``` と ``` header("Access-Control-Allow-Origin: http://localhost:8080"); header("Access-Control-Allow-Credentials:true"); header('content-type: application/json; charset=utf-8'); ``` でヘッダを出力しています。 ですが実際に実行してみると、APIにアクセスするたびにセッションIDが変わってしまいます。 でブラウザのNetworkログを見るとAPI(PHP)からのレスポンスには ``` Set-Cookie: PHPSESSID=**********; path=/; secure; SameSite=None ``` とセッションIDが送られてくるのですがブラウザにCookieが保存されていないようで、毎回セッションIDが新規発行されてしまうために同じセッションにアクセス出来ないって事かな?と予想していますが対策が分かりません。 Chromeがバージョン80からクッキーについてのクロスサイト関係が厳しくなるのは分かってたつもりですが今回のこれがそれに絡むのかどうかも正直よく分かっていません。 コンソールにはクロスサイトのワーニング等出ていないので正しく動作していると思うのですが、クッキーが保存されない(事が原因かな?と予想しているのですが)件についてヒントを頂けませんでしょうか? よろしくお願い致します。
回答: 本質的な解決はしていません。 vue uiで立ち上げてるlocalhost:8080が何をやってもレスポンスで来ているPHPSESSIDをクッキーに保存してくれない。 vueで強制的にcookieをPHPSESSIDの名前で保存してもaxiosでgetだろうがpostだろうがクッキーを送信してくれない。 以上の二点を同時に解決できないので、取り急ぎ対応として 最初にapi側でセッションを作った際(今回はログイン処理)のPHPSESSIDをvueへ送る。 vueでsessionStorageに保存する(これはcoookieでも良いですけど同じ事なので) セッションが必要な所でURLにクエリーでPHPSESSIDを送る。 PHP側でセッションをそのIDで開始する。 ログアウトの処理でsessionStorageを破棄 本来は自動?でやってくれることを手動でムリヤリやることで対応しました。 ちょっと嫌なやり方ですがとりあえずはローカルのみの話ですし、セッション自体は正しく取れるようになるので(当たり前ですが)妥協案ですが質問を一旦閉じることにします。