【未解決】CakePHP4のログアウト時のセッション削除

CakePHP4でログイン機能Authのログアウト時にセッションが削除できない問題

未解決ですが情報記載します。

ログアウト処理時にセッションのdestroyを行うとログイン情報が削除できないのです。


$this->Auth->logout();
$this->session->destroy();

Auth->logoutのみ
 同列のセッション情報が生きている
session->destroyを追加
 Authのログイン情報が生きている

Auth->logoutはAuth配下のセッション情報は削除できるが、Authと同列のものは削除できていない。
そこで直接Session->destroyを行うと、同列のものは削除できたがAuthの情報は削除できずに残っていた。

調べてみても情報なし。
しょうがないのでdeleteで個別に削除


$this->Auth->logout();
$this->session->delete("Data");
$this->session->delete("HogeHoge");

ちなみにPHP関数でsession_destroyだとエラーでした。

CakePHP4のFormヘルパーでDivタグの削除

CakePHP4のフォームヘルパーでDIVが削除できなくて困った。
DIVのオプションがなくなったようです。

CakePHP3からなくなったのかな?
CakePHP3のやりかただと削除できなかったので、CakePHP4のマニュアルに載っているやり方で削除します。

フォームヘルパーのテンプレートで対応

マニュアル
https://book.cakephp.org/4/ja/views/helpers/form.html#formhelper

個別にできないのは結構不便。
他にやり方があるのだろうか・・・

プラグインJetpackのエラー

WordPressのプラグイン更新などしているとJetpackのエラーがでることが度々あった。

動作には問題なさそうだけど気になるので調べて見ました。

エラー内容は↓


Fatal error: Uncaught Error: Class 'Automattic\Jetpack\Connection\Tokens' not found in ****/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-client.php:75
Stack trace:
#0 ****/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-client.php(26): Automattic\Jetpack\Connection\Client::build_signed_request(Array, 'query('jetpack.syncAct...', Array)
#3 ****/wp-includes/class-wp-hook.php(287): Automattic\Jetpack\Sync\Actions::send_data(Array, 'deflate-json-ar...', 1614820658.9668, 'sync', 0.0076038837432861, 0.013982057571411, 5, '60403532e7074')
#4 **** in ****/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-client.php on line 75

更新していくとゴミコード?などがそのままになっていてエラーになるらしいです。
Jetpackを一旦削除して新規インストールを行うと上記エラーが解消されます。

contact form 7の警告を修正

メールフォームプラグインのcontact form 7 で送信ボタンを押すと下記の警告が発生

「Deprecated: get_option がバージョン 5.5.0 から非推奨になった引数付きで呼び出されました。オプションキー「blacklist_keys」は「disallowed_keys」に名前が変更されました。 in ****\wp-includes\functions.php on line 5061」

警告なので無視はできるけど、表示されたら気になってしまう!

ってことで修正。

「blacklist_keys」を使っちゃいけないよという警告だと思うので「blacklist_keys」を探してみる。

下記ファイルに発見!
\wp-content\plugins\contact-form-7\modules\disallowed-list.php

52行目

修正前
$mod_keys = trim( get_option( ‘blacklist_keys’ ) );

修正後
$mod_keys = trim( get_option( ‘disallowed_keys’ ) );

これで警告が消えました。
やったね!

PostgreSQLのエスケープ事情

備忘録的にアップします。

かなり昔に作られたシステムのメンテで学んだこと
pg_queryを使用してSQLを処理していましたが、自前のエスケープが効いてなくてエラーが発生していました。

addslashesで処理をしていましたが・・・

Googleティーチャーに聞いてみると記事を発見

standard_conforming_strings がOnの場合はエスケープが文字として認識される。
\nと改行コードがバックスラッシュとnの2文字と認識されるようです。

PostgreSQL9.1以降はこの値のデフォルトがOnということ
それで自前でエスケープしてもエラーになったと。

standard_conforming_stringsの説明

pg_queryを使っていたのをpg_query_paramsに変更することで関数でエスケープしてくれるので、これで回避!

pg_query_params

エスケープがバックスラッシュではなくなったってことですね。

参考:徳丸浩の日記

PHPのエラーを表示する

PHPでエラーが表示されずに困っていてその調整で初めて知ったこと。

PHPのエラー表示には「display_errors」を使います。
これがOffになっているとエラーが表示されません。

今回これがOnになっているのにエラーが表示されないのです。
PHPのバージョンは5.6.x

htaccessを見てみると下記の通り

お判りいただけただろうか…

正解は下記です。

なんと!htaccessで記述する場合はE_ALLのような定数を使ってはいけないのです。
数値で記述するとちゃんと認識されます!

各定数の数値はこちらで調べてください。

あー 知らなかった~
勉強なりました。

GoogleChromeでキオスクモード

サイネージ関連のお仕事で調べてみた。

GoogleChromeにサイネージ用にキオスクモードというのがあるらしい

設定は簡単だった。

ショートカットを右クリック→プロパティ

ショートカットタブのリンク先を下記のように変更する

後はショートカットをダブルクリックで起動すると指定のURLでキオスクモードで使える
画面を閉じる場合はAlt+F4などで閉じるとOK

CakePHP2でセッションが途中で切れる問題

CakePHPでセッションが途中で切れるという現象に遭遇しました。

テストサーバーでは問題ないけど、本番サーバーに移すと症状が発生。

有効期限を30日にしているが、1時間ほどでセッション切れを起こす。

開発ツールを使って、セッションを見てみると、
なぜかセッションが2個発行されている。
1個はCakePHPで発行したもの。
もうひとつが謎のセッション

セッションの説明に下記の注意書きがありました。

https://www.php.net/manual/ja/session.configuration.php#ini.session.gc-maxlifetime


----------
注意: 異なる値を session.gc_maxlifetime に指定している 別々のスクリプトがセッションデータの保存場所を共有している場合、 一番小さい設定値に達した時点でデータが消去されます。
このような場合には、 お互いに session.save_path を使用します。
----------

なぞのセッションが1時間になっていて、それに巻き込まれてセッション切れを起こしているようでした。
サーバーはGMOクラウドサーバー

謎のセッションをどうすることもできない。
htaccessでの変更もエラーが出てできません。

save_pathを変える方法で対応します。

CakePHPのcore.phpを変更

‘defaults’ => ‘php’

↓↓↓変更↓↓↓

‘defaults’ => ‘cake’

これでセッションが/tmp/sessionsに生成されます。

セッションの巻き込み事故回避完了!

SSLとセッション

当然のことかもしれないけど、知らなかったので結構はまってしまった。

SSLとセッションの読み書き
SSL内ではnonSSLとは違うセッションが発行される。

SSL内
○ SSL内セッションの読み書き
○ nonSSLセッションの読み書き

nonSSL内
× SSL内セッションの読み書き
○ nonSSLセッションの読み書き

当然だけどnonSSLからSSLのセッションにはアクセスできない。

SSLとnonSSLが混在しているサイトはセッションの扱いに気をつけないといけない。

セッション使うならサイト全体をSSLにしちゃったほうが悩まずにすみますね。

さくらサーバーのメンテ情報

だいぶ久しぶりの更新になってしまいました・・・

さて、さくらレンタルサーバーをお使い人向けの情報です。
さくらよりメンテナンス情報を公開されています。
さくらレンタルサーバー

SSL化後にhtaccessでSSLへの転送設定を行っている場合、メンテ後にサイトが見れなくなる不具合が出ます。
下記の部分がそれです。

———–
(2019年2月26日追記)
【X_SAKURA_FORWARDED_FOR の環境変数の利用について】
X_SAKURA_FORWARDED_FOR の環境変数を利用されていると、
本件のOSのバージョンアップ以降にページが表示されなくなる不具合が発生する場合があります。
X_SAKURA_FORWARDED_FOR を利用せずにHTTPSを利用いただくようお願いいたします。
———–

■修正前

 

■修正後

 

ある日突然動かなくなるとか怖いんだけど。