• ベストアンサー

携帯サイトでセッションでのフォームで変数の受け取り方法

PHP5で携帯サイトでクッキーが使えないという条件でセッションを使ってのformのやりとりでプログラミングしています。 クッキーが使えないのでPHPの先頭で ini_set('session.use_trans_sid', '1'); としていて 入力フォームはセッションをして後は名前を入力するだけの ごく普通です(簡単に書きます)。 session_start(); <form action=onamae.php method=post> 実際にはここに以下の1行が入る <input type="hidden" name="PHPSESSID" value="XXXXXXXXXXXX" /> おなまえ<br><input type=text name=name size=15> <input type=submit value="投稿する"> 問題は受け取りですが $_POST['name']だとうまく受け取れますが $_SESSION['name']だと受け取れません。 入力するフォーム側で何らかの仕掛けが必要なのか分からないのです。 お手数ですが宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

> $_POST['name']だとうまく受け取れますが > $_SESSION['name']だと受け取れません。 そちらが 書かれている HTMLを見る限り、極めて正常な動作をしているように見えます。 <form>で POST で name を送信しているのですから、$_POST でしか受け取れなくて正常かと。。 まぁ、$_REQUEST でも受け取れますが、細かい事は置いておくとして。 セッションは あくまでも サーバー側で持ってる変数で、 $_SESSION[name] = $_POST[name]; とか セッションに 書き込んでやらない限り 空っぽなはずです。 厳密には 空っぽではありませんが、別の話しなので置いておきます。 POST で 送ったものが そのまま セッションに入るのは 俺は知りません。 俺が知らないだけかもしれません。 あるなら誰か教えてください。 しょっぱなに $_SESSION = $_POST; ってのは 無しの方向で。

reimy1
質問者

お礼

返答ありがとうございます。 やはり$_SESSION[name]に入れてやらないとダメなのですね。 複数ページでフォームデータをやりとりするなら 便利そうですね。 勉強になりました。

その他の回答 (2)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

<?/* え~と、#1です。 自分で読んでみて、意味不明な事を書いてるなと思ってしまいました。 俺が言いたかったのは、要は「セッションは入れてやんない限り、自動では入んないはずですよ」って事です。 なんか見当はずれな事をしている気もしたのですが、ゴミプロ作ってみました。 ソースは読めると思いますので、説明は はしょります。 何度か繰り返してみると、セッションの動きが分かるかと思います。 逆に 混乱しちゃったら すみません。 セッションで間違いやすいのは、session_destroy() しても、 その時点では $_SESSION の 中身は残ってるってトコですかね。 */?> <? session_start(); $me = $_SERVER[PHP_SELF]; if ($_SERVER[QUERY_STRING] == "kill") { session_destroy(); print "sessionを破壊ました。<hr>"; } //------------------------------------------------ $Session = ""; foreach($_SESSION as $name => $value) { $Session.= "[$name] $value<br>\n"; } print "sessionの中身<hr>$Session<hr>\n"; //------------------------------------------------ if ($_POST) { $_SESSION[name] = $_POST[name]; } $_SESSION[count]++; print " <form action=$me method=post> name <input type=text name=name> <input type=submit value='send'> </form> <hr> <a href=$me?kill>sessionを破壊する。</a>"; ?>

reimy1
質問者

お礼

セッションはサーバーから時間が経ったら自動で消えるだけでなく 情報を破壊することもできるのですね。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

>POST で 送ったものが そのまま セッションに入るのは 俺は知りません。 >しょっぱなに $_SESSION = $_POST; ってのは 無しの方向で。 予期しないデータの上書きや、POSTで送られていないデータの削除が発生する可能性を考えると、あり得ない仕様という事で知らないのは当然だと思います。 私は、携帯の契約者ID(各社で呼び方は変わりますがSIMカード毎に割り当てられた、契約者番号のようなもの、機種変更しても番号は変化しない)をセッションIDとして割り当てて、セッション管理を実現しています。 ※完全ではないものも、セッションハイジャック対策としては有効ではないかと思っています。

reimy1
質問者

お礼

なるほど、セッションIDとして割り当てるのは 自分なりに細工できるのですね。 セッションハイジャックとかも聞いたことがありますが なにかしら勉強してみます。

関連するQ&A