Love澤's Room

技術系ネタをまとめていたブログ。現在はカテゴリにこだわらず更新中。

SESSION情報を維持したままAjaxな処理を行う方法

新サイトへ移転しました
約3秒後に自動的にリダイレクトします。

やりたいこと

Ajaxな処理をする際にも、SESSIONを維持出来るようにする。

(参考サイト)
ajax版できたよー - スキマハコ

どうするか

jQueryを用いている場合、以下のように記述すると良い。PHP側は特に特別な記述はなく、普通にSESSION変数を使用できる。

  • 変更前(SESSION情報維持できない)
$.ajax({
    url: "hogehoge.php",
    type: "POST",
    data: {
        "foo" : "bar"
    },
    success: function(json_result) {
        // 中略
    },
    error: function() {
        // 中略
    },
    complete: function(() {
        // 中略
    }
});
  • 変更後(SESSION情報維持できる)
$.ajax({
    url: "hogehoge.php",
    type: "POST",
    data: {
        "foo" : "bar"
    },
    beforeSend: function(xhr) {
        xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
    },
    success: function(json_result) {
        // 中略
    },
    error: function() {
        // 中略
    },
    complete: function(() {
        // 中略
    }
});

追加した部分が何を意味するか

セキュリティに関することなので、この部分は理解しておきたいのだけど、まだまだ及ばない。

  • CSRFという攻撃がある。
  • CSRF攻撃に対する策として、GET以外のメソッドでデータを送信する際にはトークンが必要である。
  • 「xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));」の部分でそのトークンを発行している。

上記は間違っている可能性があるので、調べたら、随時追記・修正する。

以下に説明してくれているサイトをメモする。