PHPにて同一サーバの別ディレクトリでセッションを振り分ける方法
2024/02/22
同じサーバ内にmemberとownerの別ディレクトリがあり、それぞれにsessionを用いたログインシステムを作りたかった。owner側にsessionを用いたログインシステムを入れており、member側には何も入れていなかった。
そういう経緯なのでowner側のシステムをコピペでいけるかと思ったが、よくよく考えると同一サーバでsessionを発行した場合に変なことになるんじゃないかとも思った。
具体的にはownerにログインした後にmemberディレクトリに行ったら、既にログインされた(sessionが発行された)扱いになるんじゃないかと。
調べたところやはりそのような挙動になるみたいで、解決策はsession_name()を使えば良いとのこと。
使い方
<?php #何も指定しない場合のsession_nameはPHPSESSIDになる(php.iniの設定で変更可能)
session_start();
?>
<?php #指定する事で別のsession_nameでsessionを発行できる
session_name('MEMBER');
session_start();
?>
<?php #以下のような指定をした場合
session_name('MEMBER');
session_start();
$_SESSION['name'] = 'member_name';
?>
<?php #var_dumpするとmember_nameが返される
session_name('MEMBER');
session_start();
var_dump($_SESSION);
?>
<?php #var_dumpするとNULLが返される
session_start();
var_dump($_SESSION);
?>
<?php #さらに以下のような指定をした場合
session_start();
$_SESSION['name'] = 'owner_name';
?>
<?php #var_dumpするとmember_nameが返される
session_name('MEMBER');
session_start();
var_dump($_SESSION);
?>
<?php #var_dumpするとowner_nameが返される。つまり別セッションとして扱う事ができる
session_start();
var_dump($_SESSION);
?>
リファレンス
http://php.net/manual/ja/function.session-name.php
その他
sessionログインした後にfirefoxとかでcookieを見るとPHPSESSIDと入っており、これは何だろうと思っていたけど、session_nameのデフォ値であると知ってちょっとすっきりした。
まだシステム実装はしてないけどテストした感じでは問題なさそう。結果は実装&テスト後に追記する。
2017/07/18追記
実装したところ問題なし。この方法で使っていけそう。
関連記事
-
-
WordPressにてPHPのAPCuを使用して高速化を図る方法
先日本サイトのサーバにAPCuを導入した。しかしながら所感にも書いたとおりAPC ...
-
-
CodeIgniter4 & reCAPTCHA でお問い合わせフォームを作成する方法
以前CodeIgniter4.4.4で簡易的なお問い合わせページを作成したが、今 ...
-
-
Composer自体のインストールとmonolog及びTwigをComposer経由でインストールする方法
「Composerで○○をインストール」というのをよく見かけるがComposer ...
-
-
Stripeでキャンセル処理を行う際に「$config must be a string ~」エラーが出る場合の対応方法
Stripeにて先日メモした内容でキャンセル(返金)処理をしようとしたところ1件 ...
-
-
PHPでCannot re-assign auto……のエラー
PHPバージョンアップに伴い「Fatal error: Cannot re-as ...