プロが教えるわが家の防犯対策術!

通常の変数であれば、

$var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]);

ですが、セッション変数を配列にするにはどうしたら良いのでしょう?
(配列から取り出す方法も含め)

$var = array($_POST["var1"], $_POST["var2"], $_POST["var3"]);
$_SESSION["$var"];



$_SESSION["$var"] = array($_POST["var1"], $_POST["var2"], $_POST["var3"]);

としてみましたが、ダメなんですね。
よろしくお願いいたします。
*PHPバージョンは5です

A 回答 (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"]++;
    • good
    • 0
この回答へのお礼

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

アッサリ解決です。ありがとうございました。

お礼日時:2007/04/06 12:23

>$_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」に上書きされてしまいますので。

この回答への補足

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

補足日時:2007/04/06 10:39
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
うまく説明できなくてすみません。

属性が同一で値の異なる変数"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ずつ増えるというものではありません)

お礼日時:2007/04/06 10:23

>セッション変数とは、サイト全体を通じて保持している変数で


>ユーザIDや、カウンタまたは承認済みかどうかという情報を
>保持しています。
http://blog.gold-fish.jp/?itemid=280

セキュリティの為に相手を確認/承認する為にされるものです。
サーバーの保持している変数なので適当な変数の値をいれるものではないと言う事です。
適当な値を取得するのでしたらPOSTを使うべきです。

この回答への補足

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

補足日時:2007/04/06 10:28
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/06 10:26

セッション変数をなぜPOSTで受け取りたいのかが不明です。



セッション変数についてもう少しお調べになった方がいいと思います。

参考URL:http://php.s3.to/man/function.session-start.html
    • good
    • 0
この回答へのお礼

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

合っていれば、POSTで受け取ることも、普通にありえると思うのですが、
違うのでしょうか?
GETでも構わないデータなのですが、スクリプト書換え時に更新確認が
出てしまうので、POSTにしていました。

お礼日時:2007/04/05 23:21

【代入】


$_SESSION['var'] = array(100, 200, 300);

【参照】
echo $_SESSION['var'][1]; // -> 200

ということでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

お礼日時:2007/04/05 23:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!