ちょっと困惑する状況に出くわしました。私のコントローラーアクションは次のようになります。
public function myaction($eventId = false) {
if(!$eventId) {
//list all events
$data = foo;
} else {
if(!$this->Event->findById($eventId) )
{
$this->Session->setFlash('myerror message', 'flash_frontend_message');
$this->redirect(array('controller' => 'events', 'action' => 'myaction'));
} else {
// display event information
$data = foo;
}
}
$this->set($data);
}
データベースに見つからない$eventIdを使用して関数を呼び出すと、エラーメッセージが出力され、ユーザーはすべてのイベントのリストにリダイレクトされます。ただし、有効なeventIdを選択し、関連情報を表示してからブラウザの戻るボタンを押すと、この場合のURLに$ eventIdが含まれていなくても、前のフラッシュメッセージが再び出力されます。
何が起こるかというと、ページはリロードされるのではなく、ブラウザのキャッシュからロードされると思います。私はこのようにビューをキャッシュに保存することを避けようとしました:
<!--nocache-->
<?php echo $this->Session->flash(); ?>
<?php echo $this->Session->flash('auth'); ?>
<!--/nocache-->
それでも、フラッシュメッセージが表示されます。
この動作を防ぐ方法はありますか?表示後にフラッシュをクリアする方法はありますか?