概要
CodeIgniterでページ遷移後に「戻る」ボタンやリンクを実装する際のポイントと、代表的な手法を解説します。
1. ブラウザの履歴を利用する方法
JavaScriptのhistory.back()
最もシンプルなのはクライアント側でブラウザの履歴を操作することです。
echo '<a href="javascript:history.back();">← 前のページへ戻る</a>';
注意点: ユーザーが直接アクセスしたページや、履歴が無い場合は期待通りに動作しません。
history.go(-1)
同様に history.go(-1) でも実現できます。
echo '<button onclick="history.go(-1)">戻る</button>';
2. セッションで遷移元URLを保持する方法
サーバ側で遷移元のURLを保存しておき、戻りリンクを生成します。
コントローラ側の実装例
$this->session->set_flashdata('referrer', $this->input->server('HTTP_REFERER'));
public function some_page()
{
$data['back_url'] = $this->session->flashdata('referrer') ?? site_url();
$this->load->view('some_page', $data);
}
ビュー側の表示例
<a href="">← 前のページへ戻る</a>
この方法はPOSTリクエスト後のリダイレクトにも対応しやすく、履歴が無くても確実に指定したURLへ遷移できます。
3. GETパラメータでリファラを受け渡す方法
リンクに return_url パラメータを付与し、次のページで取得して戻りリンクに利用します。
// リンク生成側
$return = urlencode(current_url());
echo '<a href="'.site_url('next/page').'?return_url='.$return.'">次へ</a>';
// 受け取り側 (コントローラ)
$return_url = $this->input->get('return_url');
$data['back_url'] = $return_url ? urldecode($return_url) : site_url();
$this->load->view('next_page', $data);
URL が長くなる点と、外部サイトからの不正な URL が混入するリスクがあるため、ホワイトリストでチェックすることが推奨されます。
4. まとめ
- 単純な戻りは
history.back()が手軽。 - サーバ側で確実に戻すならセッションやフラッシュデータを利用。
- GET パラメータは柔軟だが、バリデーションが必須。
実装する画面の遷移パターンとユーザー体験を考慮し、最適な手法を選択してください。