ログインできなくなるバグと修正方法

長時間(標準では24分か30分以上)ログインページを開いたままにして、ログインをする。
1つのブラウザでログインページを2窓にして片方でログイン、ログアウトをして、もう片方でログインをする。
などの操作をすると、ログインができない。
と、ここまではいいとして、『前のページに戻る』リンクを開いてログインしようとすると、何度やってもログインできません。

これはCSRF対策にトークンを使っていることと、戻るリンクがhistory.back()になっているためです。

history.back()を使って前のページに戻ると、ページをサーバから更新しないで、ブラウザのキャッシュからページを表示します。
そうすると古いトークンを使用してしまうため、ログインできなくなります。

対処方法

/apps/pc_backend/modules/default/templates/loginError.php

<p><?php echo link_to_function(__('前のページに戻る'), 'history.back()') ?></p>

ここを

<p><?php echo link_to(__('前のページに戻る'), '@homepage') ?></p>

これに変えます。

/apps/pc_frontend/modules/member/templates/loginError.php

<?php op_include_line('backLink', link_to_function(__('Back to previous page'), 'history.back()')) ?>

ここを

<?php op_include_line('backLink', link_to(__('Back to previous page'), '@homepage')) ?>

これに変えます。

ここで@homepageとはrouting.ymlに記述されている設定項目です。

Internet Explorer8、Firefox3.6で検証。

また他のページでもhistory.back()でフォームページに戻る画面遷移が多々あり、これらでも同様の事象が発生します。

関連記事

スポンサーリンク

EXCEPT演算子 差集合を計算する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る