• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セッション変数と配列)

セッション変数と配列を使用する方法

このQ&Aのポイント
  • セッション変数を配列にする方法を教えてください。
  • 通常の変数と同様に、セッション変数を配列で定義することができます。
  • ただし、配列からセッション変数を取り出す場合は、適切な慣用表現を使用する必要があります。

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

  • ベストアンサー
  • racchoman
  • ベストアンサー率71% (20/28)
回答No.5

いまいちよく判らないのですが・・・ >$_SESSION["var1"]=$_POST["var1"]; >$_SESSION["var2"]=$_POST["var2"]; >$_SESSION["var3"]=$_POST["var3"]; >…… >という風にしているのですが、その後の処理はほぼ同じなので、 >$_SESSION["var[n]"]=$_POST["var[n]"]; >という風に使いたいのですが、可能でしょうか? これなら、以下のように書けます。 for ($i=0; $i<XXX; $i++) { $_SESSION["var$i"] = $_POST["var$i"]; } >if($f == 1){ >$_SESSION["var1"]++; >}else if($f == 2){ >$_SESSION["var2"]++; >}else if…以下続く。 >ではなく(イメージ的には…) >$_SESSION["var[$f]"]++; これならば、以下のように書けます。 $_SESSION["var$f"]++;

kinoshita8
質問者

お礼

回答ありがとうございます。 SESSIONを配列に…という考えで頭が埋まってました。 forを使えばいいだけですよね。お恥ずかしい…。 アッサリ解決です。ありがとうございました。

その他の回答 (4)

  • racchoman
  • ベストアンサー率71% (20/28)
回答No.4

>$_SESSION["var[n]"]=$_POST["var[n]"]; >という風に使いたいのですが、可能でしょうか? いまいちよく判りませんが、POSTされた変数を全てSESSIONに放り込みたいのであれば、 $_SESSION['hoge'] = $_POST; のようにすることはできます。 こうすれば、 $_POST['foo'] は、$_SESSION['hoge']['foo'] になります。 >私の認識では、セッション変数とは、更新や異なるページでも >データを(サーバで)保持し、セッションIDでクライアントを認識、 >判別して、データを利用できる、という考えですが、誤っていますか? >合っていれば、POSTで受け取ることも、普通にありえると思うのですが、 >違うのでしょうか? これは両方とも間違っていないと思いますよ。 POSTやGETされたデータをSESSIONに入れること自体には、何ら問題はありません。 ただし、例えばログインしたあとに、$_SESSION['USER']にユーザIDを入れているとしたら、$_SESSION['USER'] を外部から上書きされるようなことは避けなければなりません。 ですから、先ほどの例でいうと、 $_SESSION['hoge'] = $_POST; とすべきであって、 $_SESSION = $_POST; とすべきではありません。 後者のようにすると、POST変数に USER=xxx があると、$_SESSION['USER'] が「xxx」に上書きされてしまいますので。

kinoshita8
質問者

お礼

回答ありがとうございます。 うまく説明できなくてすみません。 属性が同一で値の異なる変数"var?"が複数あり、 変数名をvra1,vra2,vra3…としています。 それら以外にも異なる処理(認証等)に使う変数があるので、 POSTされた変数を全て、というのは望みません。(*1) また、var?とは別に条件判断をする変数"f"があり、数値が入ります。 スクリプトでは、変数"f"が… "1"なら"var1"を使って処理、 "2"なら"var2"を使って処理、 というものを作りたいのですが、 現状では、変数"f"の値を条件判定としたif関数で行っています。 これを配列を用いて、数行の文でできないかと思いまして…。 var?の値は、基本的に上書きしていくのですが、変数"f"によって 非処理となった場合、値を保持したいのでSESSIONを使った、という訳です。 if($f == 1){ $_SESSION["var1"]++; }else if($f == 2){ $_SESSION["var2"]++; }else if…以下続く。 ではなく(イメージ的には…) $_SESSION["var[$f]"]++; だけで済ませたいのです。 ちなみに、カウンタを作成しています。 アクセスカウンタではなく、ボタンを押すと、その項目が増えるもので、 増える値は統一されていません(毎回1ずつ増えるというものではありません)

kinoshita8
質問者

補足

回答へのお礼(*1)の補足です。 一旦、全てのPOST変数をSESSIONに入れて、使うものだけ使い、 IDやPASSなどは放っておく(使わない) というのは、セキュリティ上、問題ありますか?

  • calltella
  • ベストアンサー率49% (317/635)
回答No.3

>セッション変数とは、サイト全体を通じて保持している変数で >ユーザIDや、カウンタまたは承認済みかどうかという情報を >保持しています。 http://blog.gold-fish.jp/?itemid=280 セキュリティの為に相手を確認/承認する為にされるものです。 サーバーの保持している変数なので適当な変数の値をいれるものではないと言う事です。 適当な値を取得するのでしたらPOSTを使うべきです。

kinoshita8
質問者

お礼

アドバイスありがとうございます。 作成しているのは、データの保持を行ったり、上書きしたりする カウンタで、ブラウザ終了後もデータを保持するものなので、 POSTだけでは無理だと思うのですが…。 SESSIONを使わずに行える方法があるなら教えていただけませんか?

kinoshita8
質問者

補足

補足します。 POSTをSESSION変数にするのは、もちろん、認証済みの 正規クライアントのみです。

  • calltella
  • ベストアンサー率49% (317/635)
回答No.2

セッション変数をなぜPOSTで受け取りたいのかが不明です。 セッション変数についてもう少しお調べになった方がいいと思います。

参考URL:
http://php.s3.to/man/function.session-start.html
kinoshita8
質問者

お礼

アドバイスありがとうございます。 なぜ、POSTで受け取るべきではないのか、わからないのですが、 ここに書き込む前にも調べてはみましたが、セッション変数に配列を 入れる方法が見つからなかったので、根本的に考え方がおかしいか、 あまり使われないことなのか、とは思ったのですが…。 私の認識では、セッション変数とは、更新や異なるページでも データを(サーバで)保持し、セッションIDでクライアントを認識、 判別して、データを利用できる、という考えですが、誤っていますか? 合っていれば、POSTで受け取ることも、普通にありえると思うのですが、 違うのでしょうか? GETでも構わないデータなのですが、スクリプト書換え時に更新確認が 出てしまうので、POSTにしていました。

  • racchoman
  • ベストアンサー率71% (20/28)
回答No.1

【代入】 $_SESSION['var'] = array(100, 200, 300); 【参照】 echo $_SESSION['var'][1]; // -> 200 ということでしょうか?

kinoshita8
質問者

お礼

回答ありがとうございます。 array以下に、変数を入れることはできないのでしょうか? 現状では、POSTされたvar1、var2、var3…という変数を $_SESSION["var1"]=$_POST["var1"]; $_SESSION["var2"]=$_POST["var2"]; $_SESSION["var3"]=$_POST["var3"]; …… という風にしているのですが、その後の処理はほぼ同じなので、 $_SESSION["var[n]"]=$_POST["var[n]"]; という風に使いたいのですが、可能でしょうか?

関連するQ&A