回答編集履歴

1

サンプルコードの追記

2016/05/19 07:44

投稿

KatsumiTanaka
KatsumiTanaka

スコア924

test CHANGED
@@ -1,3 +1,75 @@
1
1
  「非同期に」ということであれば、対象コントローラにcookieを全削除するメソッドを用意して、jsからAjaxにより呼び出し、コントローラ内のcookieを削除するということになると思います
2
2
 
3
3
  ヒント程度で、申し訳ない
4
+
5
+
6
+
7
+ **コードを追記:**
8
+
9
+ 自分は、AjaxはJQueryを使っているので、クライアント側は以下のような実装になります
10
+
11
+ ```JavaScript
12
+
13
+ function (Xのクリックイベントを処理する関数)
14
+
15
+ $.ajax({
16
+
17
+ type: "POST",
18
+
19
+ url: '/ドメイン名/コントローラ名/メソッド名(仮称:ClearSession)',
20
+
21
+ data: {
22
+
23
+ row_num : row // パラメータを設定
24
+
25
+ },
26
+
27
+ success: function(data) {
28
+
29
+ // Ajaxが成功したときの処理
30
+
31
+ },
32
+
33
+ error: function(data, status, errors) {
34
+
35
+ // Ajaxが失敗したときの処理
36
+
37
+ }
38
+
39
+ });
40
+
41
+ }
42
+
43
+ ```
44
+
45
+
46
+
47
+ 該当するコントローラ側のメソッドは以下のような実装になります
48
+
49
+ ```CakePHP
50
+
51
+ function ClearSession() {
52
+
53
+ $this->autoRender = false; // autoRenderをオフにしてViewを処理しないようにする
54
+
55
+
56
+
57
+ $rtnData = array('status' => 'NG');
58
+
59
+ try {
60
+
61
+ $row = GetParams::getParamForm('row_num', $this->params); // パラメータを取得
62
+
63
+ $this->Session->delete(); // 削除したいセッションの情報を指定
64
+
65
+ $rtnData = array('status' => 'OK');
66
+
67
+ } catch (Exception $e) {
68
+
69
+ }
70
+
71
+ return json_encode($rtnData);
72
+
73
+ }
74
+
75
+ ```