「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
Movable Type 3.3のコメント投稿の不具合
当Blogのリニューアル作業を行っていますが、新Blogでは、コメントスパム防止のために、小川宏高氏作の「Captcha」というプラグインを利用します。
このプラグインのテストをしていたときに、Movable Type 3.3のコメント投稿機能に、不具合と思われる点を見つけました。
Movable Typeでは、コメント投稿時に「Typekey」というIDを使って認証を行うことができます。
「Typekeyを使わないで投稿されたコメントは保留する」など、スパム対策などに利用することができます。
各エントリーのコメント入力フォームで、Typekeyログインしてコメントを書き、直接に投稿した場合は、問題はありません。
しかし、コメントをプレビューしてから投稿すると、問題が起こりました。
Captchaプラグインを入れた場合、コメントプレビューして投稿すると、Captchaのテストでエラーになり、Typekeyからログオフした状態になりました。
また、Captchaプラグインを使わないと、コメントをプレビューしてから投稿すると、Typekeyの情報が外れた状態でコメントが投稿され、Typekeyからログオフした状態になりました。
MTのソースを見てみると、App/Comments.pmの中の「_get_commenter_session」という処理で、Typekeyログインのチェックが行われています。
MT3.2とMT3.3でこの部分が若干異なっていて、それが原因で上で書いたような現象が起こっています。
問題の箇所は、MT3.3のApp/Comments.pmの80~82行目です(以下のリスト)。
if (!$sess_obj || ($sess_obj->start() + $timeout < time) || ($q->param('email') && ($sess_obj->email ne $q->param('email'))) || ($q->param('author') && ($sess_obj->name ne $q->param('author'))))
この部分のソースを、以下のように書き換えてMT3.2と同じにすると、上の現象がなくなりました。
if (!$sess_obj || ($sess_obj->start() + $timeout < time))
この件はシックス・アパートにフィードバックしておきました。