エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP 2.3 ログイン、操作履歴、アクセスログ出力

      2017/03/11

CakePHP 2.3系でログイン履歴、操作履歴、アクセスログなどのログ出力方法

 

ログ出力を作ることになった経緯

 
今回は、ログイン履歴、操作履歴、アクセスログといったログの出力に関しての説明です。
 
操作ログの出力に関しては、簡単に出力できるだろうと考えていたのですが、実は意外に実装が難しかったですね。(実はそれほど難しいものじゃないのですが、CakePHPの仕様を分かっていなくてさんざん悩んでしまった、というだけですが...)
 
最初はもしかすると、操作ログのプラグインがあるんじゃないか、とさえ思ったのですが、そこまで甘くはなかったわけです。
単純なすべてのアクセスのログを取るものや、SQLのログを取るものはありましたが、当然ながらオリジナルで作成している Webシステムに合わせて柔軟なログを出力したい、なんていう要望が叶えられるようなものはなかったワケです。
 
 

ログ出力をファイルに出力する方法

 
今回は、まず下記のサイトを参考に Vendor内に Classを作り、処理を構築しました。
http://neoinspire.net/archives/34#.UfXaItaChph
 
ちなみに、Vendorに設置した classの呼び出し方法は、CakePHP2.Xでは変更になっていますので、下記のサイトを参考にしました。
http://www.monoreview.com/?p=35
 
————–(/app/Vendor/accesslogs.php)

————–
 
————–(/app/AppController.php)

————–
 
続けて、「cake/app/tmp/logs/」の中に「accesslogs」というフォルダを作ってください。
Linux系のサーバであれば、書き込み権限を設定してください。
 
これで、上記に作成したフォルダの中にログが出力されるようになります。
 
非常に簡単にアクセスログを出力する処理が作れましたので、これは今後の勉強になったかと思っています。
ですが、これをいざ実際に必要としているログイン履歴や、各ページでの操作ログを DBに保存させる処理に拡張しよう、としたら途端に分からなくなったのです。
 
 


 

ログ出力データベースに保存する方法

 
そんなわけで、寄り道も含めて、全く違う方法で DBにログを保存する方法を探したところ、参考になりそうな下記のサイトが見つかりました。
http://pc.casey.jp/archives/750
 
こちらを参考にしながら、テーブル名は、Historyに変更し、認証処理など不要な項目を削除しました。
 
————–(テーブル)

————–
 
————–(/app/HistoriesController.php)

————–
 
「class AppController extends Controller」の中に「write_log」の関数を編集します。
 
————–(/app/AppController.php)

————–
 
————–(/View/Histories/admin_index.ctp)

————–
 
上記までの設定をすることで、ログ出力ができると思います。
一覧ページでリロードするたびにログのレコードが増えていくことが分かるでしょう。
 
 
これはこれで問題ないのですが、操作ログとして処理を作成する場合は、History以外のページでもログを出力する必要が出てきますので、その対応を作ってみました。
例えば、ログイン時にログインのログを出力する場合は、Usersでログを出力させる必要があると思いますので、まず「/Model/User.php」に Historyとの belongsToの設定を行います。
 
————–(/Model/User.php)

————–
 
続いて、「/app/HistoriesController.php」には、どのコントローラーからのアクセスなのかの情報を引数として設定します。
 
————–(/app/HistoriesController.php)

————–
 
さらに、「/app/AppController.php」でデータを保存する処理では、Userテーブルとの連携の設定を行います。(「HistoriesController.php」から送られてくるコントローラー名をもとに、テーブルの連携処理を振り分けます。)
これで、History以外のページからも Historyテーブルへログ保存の処理が行えるようになります。
 
————–(/app/AppController.php)

————–
 
この処理は、ログを出力するコントローラの数が増えれば増えるほど分岐が増えますので、もう少しいい書き方を検討する必要があるとは思いますが。
 
 
また、ログインの処理については、よくあるログイン処理をそのまま記述していると、「autoRedirect」が有効になっているため、ログイン認証が有効になったとたんに「loginRedirect」で設定してあるページに遷移してしまいます。
そのため、リダイレクトをさせる前にログ出力の処理を入れるためには、「autoRedirect」を無効にする必要がありますが、その設定に関しては、下記のサイトに分かりやすく説明がありました。
http://hima-j.in/cakephp/cakephp-last-login/
 
 

参考になるサイト

 
最後に、この記事を書くに当たって参考にしたサイトと自分でも書いてみた記事を紹介しておきます。
 
DBに値を保存する「save」メソッドに関しては下記の 2サイトが分かりやすく説明してありましたので、とても勉強になりました。
http://www.garacter.com/notes/cakephp/model/save
http://www.kaasan.info/archives/2543
 
また、下記の記事も書いていますのでご覧ください。
 CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll
 CakePHP 2.3で saveの便利な使い方・サンプルソース付き

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1
CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその1で基本的な導入方法の解説で読みながら簡単に導入が可能。

CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法

CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングをする方法を解説。インストール方法、読み込み方法。および、具体的なスクレイピングを実行するサンプルソースも。

CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法

CakePHP3にComposerからインストールできないプラグインやライブラリなどを利用する方法、vendorにファイルを設置し、composer.jsonを更新し、それを呼び出す方法を詳細に解説。

CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつテンプレートファイルがどこにあるか、設定情報ファイルがどこにあるか、を説明しつつカスタマイズの方法を解説します。

CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説

CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法

CakePHP4でコマンドを実行する際に引数(パラメータ)をコマンド内で受け取る処理について解説。複数個の引数にも対応する記述方法も解説。

CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。

CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説
CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説

CakePHP3でデータ保存処理のログを取得する方法。save()では true、falseの戻り値しか取得できないが、saveOrFail()と try…catch文を使いエラーログ、エンティティを取得し、不具合の解析を行う。

CakePHP 2.3でファイルのアップロード処理を作る

CakePHPでプラグインを使わないファイルアップロード処理を解説します。簡単です。DBにファイルを格納する方法も。