PHPでWebサービスを開発する際、複数ページにまたがったウィザード処理などの画面遷移で進んだり戻ったりするときに、フォームのデータをどのように保持するかで悩んでいます。


複数ページにまたがった画面遷移のデータ保持などの処理を効率的にするには、どのようなやり方があるのでしょうか。
開発の方針、こんなライブラリがあるなど、どのようなものでも構いません。
よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/06/22 14:27:56
  • 終了:2006/06/24 22:39:34

回答(5件)

id:tadashi0805 No.1

tadashi0805回答回数287ベストアンサー獲得回数292006/06/22 14:36:56

ポイント30pt

PHPのセッション管理を使うのが、一番楽だと思います。

http://php.oss.eznetsols.org/manual/ja/ref.session.php

これを使えば、ブラウザのウィンドウが開いている間の遷移内で、かなり大きなデータも扱うことができます。

遷移する各ページ内で、session_start()という関数を読んで、セッション用のデータ領域に情報を格納しておくことで、各ページでそのセッション情報を読み出したり更新したりできます。

id:takets

ありがとうございます。

確かにセッションは簡単でいいのですが、セッションの設定によっては一定時間しかデータを保持できない可能性がでてきてしまいます。

symfonyというPHP5のフレームワークも確かセッションでデータの受け渡しをしていた気がしますが、ページ遷移でのデータのやりとりはセッションが主流なのでしょうか。ページ移動するまでデータを保持し続ける方法はないものでしょうか。

2006/06/22 14:44:20
id:keijiro No.2

PEPOTA回答回数83ベストアンサー獲得回数12006/06/22 15:01:29

ポイント30pt

sessionがアレなら、Cookieかなと思います。

Cookieもアレなら、自作でsessionっぽい物をデータベースと絡ませて…な方法になるかもです。

仰るとおり、フレームワークの種類によっては、色んな手法が試されていると思うので、フレームワークを探ってみるのも手かもしれませんね。

id:takets

ありがとうございます。

クッキーはセキュリティに問題がありそうですが、使いどころによっては抜け道になりそうですね。

2006/06/24 22:28:59
id:tadashi0805 No.3

tadashi0805回答回数287ベストアンサー獲得回数292006/06/22 15:10:51

ポイント30pt

通常は、セッションの保持時間を超えて長い時間画面が放置されるような状況では、保持する必要はない(expireしてしまう)というのが、通常の運用だと思います。

一応、session_cache_expire()によって、分単位でexpire時間を設定できます(デフォルト値が180=3時間)ので、expire時間を長く取る必要があるページは、個別により大きな値(例えば丸1日なら60*24=1440だし、もっと大きな値もとれます)を設定しておけば、実運用上ほとんど問題にはならないと思います。

http://php.oss.eznetsols.org/manual/ja/function.session-cache-ex...

確実に無制限にしたいのなら、少ない情報ならexpire時間なしにしたCookieか、情報量が多ければ、フォームを設けてinputタグでtype="hidden"の値のところに動的に展開して、HTML画面中に無理やり出力するなどの手法も可能です。

id:takets

ありがとうございます。

実運用上のことを考えると、セッションが最適解みたいですね。

2006/06/24 22:33:47
id:elf No.4

えるふん回答回数76ベストアンサー獲得回数82006/06/22 17:18:10

ポイント30pt

個人的には昔HTML_QuickForm_Controllerを使っていました

今はそれに近いライブラリを作ったのでたまにそれを使っています.

http://pear.php.net/manual/ja/package.html.html-quickform-contro...

以前このパッケージの執筆をしたのでご興味があれば下記を参考にしてください

http://www.amazon.co.jp/gp/product/4844320254/

http://wiki.poyo.jp/read/Writing/marugoto_php/HTML_QuickForm_Con...

id:takets

ありがとうございます。

QuickForm_Controllerは考えていたことに近いことができそうです。

QuickFormはデザインに融通が利かないと聞いたことがあるのですが、一度使ってみます。

2006/06/24 22:34:51
id:Yota No.5

Yota回答回数453ベストアンサー獲得回数282006/06/22 18:47:57

ポイント30pt

 sessionかcookieかという話題になっていますね。

cookieはユーザがそのサイトにクッキーを許可してなければ、php.iniにsession.use_cookies=1としても、渡せないのでsessionにせざるを得ない場合もありますよね。確かにクッキーはブラウザを閉じない限り保持されるし、さらに何ヶ月もユーザのコンピュータに保存させることもできるから便利です。ただ、わたし個人はyahooなどの超有名サイトでcookieを使えるときわめて便利でないとこ以外は、cookieは受け入れません。上の人もいっているように、何時間も触らずに放置しておいてsessionなくなってこまった、ということは実際起こりにくいと思います。

 話は変わりますが、PEARライブラリにHTML_QuickForm_Controllerというのがあって、複数フォームをウィザード形式でつくれます。

参考サイト

http://www.okushin.co.jp/information/tanuki08/index.php

id:takets

ありがとうございます。

回答をまとめると、

1.セッション

2.QuickForm_Controller

のどちらがいいのか、簡単にテストしてみます。

2006/06/24 22:36:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません