AJAX内でのリダイレクト処理の罠
こんばんは。笹亀です。
iPhoneの白をず〜〜っと待っているのですが、
今年末ということになってとても残念でなりません。
ここまで待ったので気長に待つことにします。
さて今日はAJAX内でのリダイレクト処理をした際に、
起こったことをご紹介させていただきます。
結論から言うと、
「AJAX内でリダイレクトするときはセッションは使うな!」
まずは遷移として下記のように試しました。
AJAXでSymfonyをfile_get_contentsで呼び出すスクリプトを指定します。
まずは表示する側のページを作成します。
-- info.php
次にAJAXの呼び出し側のPHPスクリプトを作成します。
-- get.php
get.phpで呼び出しているSymfony側の処理を実装します。
上記のように実装完了後に実際に動かしてみます。

テスト開始ボタンをクリック・・

うあ、やっぱり取得できません。
普通にSymfony側を実行すれば、セッションデータの取得はおこなえます。

普通にAJAXで処理するときには、ご紹介させていただいたようなリダレクトして処理を遷移させて使うみたいなことはそうそうないことだとおもいます。
今回はイレギュラー的にどうしてもセッションを使ってリダイレクトすることになってしまいました。なぜだといろいろと試行したため時間を使いました。先入観で出来るだろうと思って使うと痛い目にあいますというか痛い目にあいました。
教訓としてはこんな遠まわしな使い方をするなということと先入観で使用するなでした^^;
皆さんもAJAX使うときには気をつけてくださいませ。
iPhoneの白をず〜〜っと待っているのですが、
今年末ということになってとても残念でなりません。
ここまで待ったので気長に待つことにします。
さて今日はAJAX内でのリダイレクト処理をした際に、
起こったことをご紹介させていただきます。
結論から言うと、
「AJAX内でリダイレクトするときはセッションは使うな!」
まずは遷移として下記のように試しました。
AJAXでSymfonyをfile_get_contentsで呼び出すスクリプトを指定します。
- info.php
↓AJAXで呼び出し - get.php(外部のSymfonyで作成されたページの呼び出し)
↓file_get_contents関数で呼び出し - http://sasa.local/top/sessionTest
↓(Symfony内でリダイレクト - http://sasa.local/top/sessionTest1
- ※Symfonyのリダイレクト(redirect)を使用してセッションのデータを書き込んで値を引き継ぐことができるのかを試しました。
まずは表示する側のページを作成します。
-- info.php
- <!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html
xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> - <head>
- <meta
http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <meta
http-equiv="Content-Style-Type" content="text/css" /> - <meta
http-equiv="Content-Script-Type" content="text/javascript" /> - <title>symfony&ajax
session Test</title> - <script
language="JavaScript" type="text/javascript" src="/jquery.js"></script> - <!--
EXPAND SKIPED --> - <script
type="text/javascript"> - <!--
- function
ajax_test() { $.ajax( { type : "POST", url : "get.php", data : {param : "sasagame hiroshi"}, success : function(txt) { $('#view_area').html(txt); }, error : function() { alert('error'); } }); - }
- //
--> - </script>
- </head>
- <body>
- symfonyとセッションのテスト中<br
/> - <input
type="button" name="test" onClick="ajax_test();return false;" value="テスト開始"> - <div
id="view_area"> - </div>
- </body>
- </html>
次にAJAXの呼び出し側のPHPスクリプトを作成します。
-- get.php
$html = file_get_contents('http://sasa.local/top/sessionTest?param=sasagame+hiroshi'); echo $html;
get.phpで呼び出しているSymfony側の処理を実装します。
- ・・・省略
public function executeSessionTest(sfWebRequest $request) { $param = $request->getParameter('param'); $this->getUser()->setAttribute('session_test', $param); $this->redirect('top/sessionTest1'); } public function executeSessionTest1(sfWebRequest $request) { $param = $request->getParameter('param'); $session_data = $this->getUser()->getAttribute('session_test', '取得できない'); echo 'session_test_data:' . $session_data . "<br />"; echo print_r($_SESSION, true); exit; } - ・・・省略
上記のように実装完了後に実際に動かしてみます。
テスト開始ボタンをクリック・・
うあ、やっぱり取得できません。
普通にSymfony側を実行すれば、セッションデータの取得はおこなえます。
普通にAJAXで処理するときには、ご紹介させていただいたようなリダレクトして処理を遷移させて使うみたいなことはそうそうないことだとおもいます。
今回はイレギュラー的にどうしてもセッションを使ってリダイレクトすることになってしまいました。なぜだといろいろと試行したため時間を使いました。先入観で出来るだろうと思って使うと痛い目にあいますというか痛い目にあいました。
教訓としてはこんな遠まわしな使い方をするなということと先入観で使用するなでした^^;
皆さんもAJAX使うときには気をつけてくださいませ。
コメント
コメントフォーム
トラックバック
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



ご指摘とおりだと思います。
よぉーく考えれば答えはでてきたのですが、
お恥ずかしながら、はまりました。。