お世話になっております。
Laravel環境でcookieを使わずにセッションを使用する方法を調べておりますがうまくいかず困っております。
※都合上どうしても古いガラケーに対応する必要があるためです。セキュリティリスクについては把握しております
お手数ではございますがご教授いただければ幸いです。
#環境
PHP 7.3.2
laravel 5.8.2
OS:centos7
docker-compose version 1.23.2
Docker version 18.09.2
#試したこと
##php.iniの設定変更
セッションIDがURLパラメータとして引き継がれるはずですが引き継がれませんでした
また、session_startを行えばセッションIDが引き継がれるようにはなりましたが、session_startを毎画面で行わないとセッションが引き継がれず、
引き継がれたとしてもセッションの値は取り出せませんでした
※調べたところlaravelのセッションとPHP既存のセッションは別物であるためだとか…
PHP
1ini_set('session.use_cookies', 0); 2ini_set('session.use_only_cookies', 0); 3ini_set('session.use_trans_sid', 1);
##セッションIDを取り出してURLパラメータで引き継ぐ
setIdは成功しましたがセッションの値は取り出せませんでした
PHP
1session()->setId($_GET['PHPSESSID']); 2session()->all();
##$_COOKIE['PHPSESSID']にセッションIDを書き込んでセッションを復元してみる
値の書き込みは成功したようですがセッションの値は取り出せませんでした
PHP
1$_COOKIE['PHPSESSID'] = $_GET['PHPSESSID'] 2session_start(); 3session()->all();
以下の方法で解決できました
php
1 /** 2 * Get the session implementation from the manager. 3 * 4 * @param \Illuminate\Http\Request $request 5 * @return \Illuminate\Contracts\Session\Session 6 */ 7 public function getSession(Request $request) 8 { 9 return tap($this->manager->driver(), function ($session) use ($request) { 10 //ガラケーの場合はGETパラメータもしくはPOSTパラメータからセッションIDを取得 11 if(MobileFlg){ 12 if(!empty($_GET['PHPSESSID'])){ 13 session()->setId($_GET['PHPSESSID']); 14 }elseif (!empty($_REQUEST['PHPSESSID'])){ 15 session()->setId($_REQUEST['PHPSESSID']); 16 } 17 }else{ 18 $session->setId($request->cookies->get($session->getName())); 19 } 20 }); 21 }
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/11 01:55 編集