• ベストアンサー
※ 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

  • セッション変数

    $_SESSION['name']=test $_SESSION['pass']=pass というようにセッション変数に、nameとpassを作成しました。 セッション変数とは、配列と考えてもいい物なのでしょうか それとも、一個一個の変数と考えるべきなのでしょうか。 よくセッション変数と言われますが、記述のされ方が配列と同じようにみえるので気になりました。 ・SESSION配列? ############################# | name = 'test'  | pass = 'aaa' | ############################# ・SESSION変数? ###############   ############# |  name = 'test' |   | pass = 'aaa' | ###############   ############# どちらが正解なのでしょうか?

    • 締切済み
    • PHP
  • セッションの宣言

    PHPでセッションの配列を使いたいのですが、 $SESSION['foo'] = array(); のように、宣言して使うと、同じページを読んだ時に セッションが空になってしまうのですが、 通常どのようにして宣言しているのですか?

    • 締切済み
    • PHP
  • セッション変数の受け渡しができない

    a.php: <?php session_start(); $_SESSION['test'] = "ok"; echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "<a href=\"./b.php\">結果ページへ</a>"; echo "</body></html>\n"; ?> b.php: <?php session_start(); echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "</body></html>\n"; ?> a.php の表示: array(1) { ["test"]=> string(2) "ok" } 結果ページへ b.php の表示: array(0) { } 再読込みでも同様です。 php.ini の Session 関係の項目は書籍やウェブサイトを参考にしておかしなものはないと自己判断していますが、指摘されるものを掲載します。

    • 締切済み
    • PHP
  • PHP SESSION変数の削除について

    PHPでブラウザを×で閉じた場合、SESSION変数 の廃棄はどうすればよいのでしょうか? ガーペジコレクション(PHP.INI等の設定)に任せておけばよいのでしょうか? ちなみにログアウトの際は下記のプロシジャを実行しています。 ----------------------------- <?php session_start(); // セッション変数を全て解除する $_SESSION = array(); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_destroy(); ?> -----------------------------

    • 締切済み
    • PHP
  • javascript 配列 変数名「array 」

    初歩的な質問失礼します。 現在jQueryを勉強しているjavascript初心者です。 教本の配列の項目で、変数名に「array」とありました。 ( var array =[ 100, 200, 300]; といった感じです。 ) これは配列を使う際のいわゆる通例?定番?的な変数名みたいなもので、array自体に意味は無いと考えてよいのでしょうか? すっきりしないのでどなたか教えてくださると助かります!

  • セッションが動かない

    セッションがちゃんと動かない。 PHPのセッションがちゃんと動きません。 他のプログラムを同じ環境で動かしたところうまく動きましたので、 コードのほうに問題があると思います。 以下のようなコードを書いています <?php require_once '../function.php'; require_once '../config.php'; if (!($_SESSION['date'])) { session_start(); } connect_db() ?> <div id="comu_confirm"> <?php $now = new DateTime(); $date = $now->format('Y/m/d H:i:s'); $title = $_POST['title']; $contents = $_POST['contents']; if ($_SESSION['date']) { $_SESSION = array(); session_destroy(); }elseif($_POST) { } //test $_SESSION['title'] = $title; $_SESSION['contents'] = $contents; $_SESSION['date'] = $date; まず最初はelseifのほうのプログラムを動かして、session変数に値を入れます。 その後、もう一度このファイルに飛んで、二回目はsession変数が入っているので ifのほうに入って、ifの中の処理をするという形にしたかったのですがif文のほうの処理に行きません。 ちなみに、二回目に見たときはURLの欄にセッションIDは表示されていませんでした。 テストとして <?php require_once '../function.php'; require_once '../config.php'; if (!($_SESSION['date'])) { session_start(); } connect_db() ?> <div id="comu_confirm"> <?php $now = new DateTime(); $date = $now->format('Y/m/d H:i:s'); $title = $_POST['title']; $contents = $_POST['contents']; //test $_SESSION['title'] = $title; $_SESSION['contents'] = $contents; $_SESSION['date'] = $date; if ($_SESSION['date']) { $_SESSION = array(); session_destroy(); }elseif($_POST) { } としてみたところ、if文の処理は動いていました。 なにが悪いのでしょうか? 不足した情報がありましたら開示したいと思いますので教えていただければと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 特定の変数の値をセッションを使わずに引き継ぐ方法

    PHPだと、output_add_rewrite_var()という関数 http://jp2.php.net/manual/ja/function.output-add-rewrite-var.phpで、 特定の変数をセッションを使わずに引き継ぐ方法があるのですが、 Perlで同じ事を実現できるでしょうか?

  • ASPのSession変数を配列にしたいのですが。。。

    ASPのSession変数を配列にして使用したいのですが、どのように表記すればいいのでしょうか? Do Until rs.EOF ID=Session("ID(i)") i=i+1 rs.MoveNext Loop という感じに使用したいのですが。。。

  • PHPの配列をjavascriptへ渡したい

    PHPの配列をjavascriptの配列に渡したいのですがやり方がわかりません。 変数の渡し方ならわかるのですが配列はどう渡せばいいのでしょうか? for文を使って渡せばいいと思うんですがどうやればいいか分かりません。 <?php $filedata=file("data.txt");//javascriptに渡したい配列 ?> <script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい </script> 何方か教えてください。

    • ベストアンサー
    • PHP
  • セッション変数について

    48歳独学でプログラムを勉強しているものです。誰も教えてくれる人がいないので、教えてgooさんには大変お世話になっております。 現在PHPを使用して無料レンタルサーバーに会員画面を作ろうとしているのですが、一般的に無料レンタルサーバーでもセッション変数は使えるものなのでしょうか。どうも上手くセッション変数がフォルダに保存されません。無料レンタルサーバーでは不可なのでしょうか。 セッション保存先に「kaiintmp」というフォルダを作成しています。 そして、 session_start(); session_save_path("kaiintmp"); session_register("simei","pass"); $_SESSION[simei]=$simei; $_SESSION[pass]=$pass; のようにしていますが・・・。 自分のパソコンでは、セッション変数が作成されますがレンタルサーバーにUPしても作成されません。 レンタルサーバーにUPしたときのpathがダメなのでしょうか? レンタルサーバーでセッション変数を使用されている方おりましたら宜しくご教授お願いいたします。

    • ベストアンサー
    • PHP