質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

4回答

6828閲覧

Laravelでcookieを使わずにセッションを使用したい

someone

総合スコア13

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/03/08 10:16

編集2019/03/11 01:56

お世話になっております。
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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

LaravelはPHPの組み込みのセッション機構は使わず独自に実装しているので、PHPのsession.〜の設定は全く効果がありません。

原理的には

  • セッションIDをクッキーからではなく特定のパラメタから受け取るようにする
  • 出力するhtmlに含まれる自ホストへのリンクにセッションIDを引き継ぐためのパラメタを付与する

ということをすれば可能だと思います。

セッションIDを受け取る処理は\Illuminate\Session\Middlewareがやっているので、これを元に改造して入れ替えればいいでしょう。

リンクにセッションIDパラメタを付与するのはbladeテンプレートの書き方でどうとでもなると思います。

もう既にだれかがやってそうなので探したら iMi-digital/laravel-transsid というのもありました。あまり大きくないので参考にするとよいでしょう。(IPアドレスのチェックなどもしていますが、場合によっては厳しすぎるかも知れません)

投稿2019/03/08 13:45

編集2019/03/08 13:47
crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

someone

2019/03/11 01:55 編集

回答ありがとうございました。 \Illuminate\Session\Middleware\StartSession.phpの処理を変更して実現ができました。
guest

0

セッションの仕組みを理解してない状態で、フレームワークの機構を置き換えようとか無謀すぎると思いますよ。

php の素の session 機構を採用しているフレームワークを使用するか、素の php で構築するのが良いと思います。

セキュリティリスクについては把握しております

質問見る限り、そもそもセキュリティの基礎が全然理解できていないです。。。

投稿2019/03/08 11:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

おそらくですが、jwtを使った実装方法を取るのがいいかもしれません。

参考記事
https://qiita.com/zaburo/items/176f907ea46767283785

投稿2019/03/09 06:44

garchomp

総合スコア128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

--enable-trans-sid オプションは適用してコンパイルしていますか?

投稿2019/03/08 10:43

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問