Cakephp PHP WEB開発

[Cakephp2→4]コントローラ編: Cake2と4間でSessionを共有する

※本サイトはPR表記を含みます。

Cakephp4でセッションを書き込んだ後、Cake2側で読むことができない場合、「同じセッション名を指定しているか」ということを疑ってみてください。

ちなみに、POSTリクエスト時などに、セッションが消去されるなどの場合は、こちらの記事へどうぞ

[Cakephp]バージョン2のセッションを3以降にも継続させる方法

続きを見る

例: 書き込んだセッションが読み込めない問題

■ Cake4側

$this->getRequest()->getSession()->write('Hoge', $this->Auth->User('id'));
$this->redirect($this->Auth->redirectUrl());  // TopPageController::index()へリダイレクト(Cake2側へ遷移すると仮定)

で、セッションを書き込むのですが、その後Cake2側のアクションへ遷移する前にセッションが存在しない状態になっていた

■ Cake2側

$sessionData = $this->Session->read('Hoge');
debug($sessionData); // null

という感じでCake4で書き込んだセッションがCake2では読み込めない状態になっていました。

A.セッションを共有させるため、各設定ファイルでセッション名を指定する

結論としては、Cake4側のapp.php で Session.cookie を指定してCake2側と揃えると良いです。

Cakeのマニュアル的に Session.cookie のデフォルト値が Cake2では CAKEPHP で、Cake4はphp.iniの session.name の値となっています。

なので、新たなセッション命名をCake2とCake4とで同じ値にするか、Cake2ではデフォ値の CAKEPHP となっているので、それに合わせると良いです。

 

■ Cake2側セッション名設定

ファイル: app/Config/core.php

Configure::write('Session', array(
    'defaults' => 'php',
    'cookie' => 'hogefuga', // セッション名を指定
));

■ Cake4側セッション名設定
ファイル: config/app.php

'Session' => [
    'defaults' => 'php',
    'cookie' => ' hogefuga ', // セッション名を指定
],

こうして、Cake2側とCake4側のセッション名を同じにすることで疎通が可能になりました。

-Cakephp, PHP, WEB開発
-