• 締切済み

セッションの宣言

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

みんなの回答

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.3

ANo.2です。 普通の変数を配列として扱う場合と同様で、必ず配列として宣言が必要であるということはありません。 ただし、実際のコードを見ていないので不明な部分がありますが、値(配列)がセットされる前に配列として扱う処理(一部の配列関数など)があるとエラーを発生する可能性があるので、その場合は配列として宣言しておく必要があります。そのためにif分で分岐して必要に応じて配列として宣言するというのは妥当な処理だと思います。

devid
質問者

お礼

有難うございました。ひとまず、IF分で回避して 実行しています。

全文を見る
すると、全ての回答が全文表示されます。
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

あらかじめ配列として定義されている必要がなければ宣言する必要もないですね。当たり前といえば当たり前ですが。 それよりセッション変数は$SESSIONではなく$_SESSIONですがそこは問題ないですか?

devid
質問者

補足

>$_SESSIONですがそこは問題ないですか? 失礼、問題ないです。 配列として使う場合は宣言が必要ですか? 現在、最初だけ$_SESSION['foo'] = array();宣言をして 同ページを読み込む時は、if文で$_SESSION['foo'] = array();を 避けるようにしています。 そうでないと、変数が再度初期化されてしまう。 なので、なにか良い方法が有るのかなと思い質問しました。

全文を見る
すると、全ての回答が全文表示されます。
  • mizutaki
  • ベストアンサー率33% (111/333)
回答No.1

$SESSION['foo'] = array(); //セッションのfooの配列をクリアする なんか、少し勘違いしているのでは無いですか? セッションを行う場合は htmlデータを出力する前にsession_start()関数を利用する事で、 セッションを使用する事が出来るようになります。 session_start()は、その人の前のセッション情報を$_SESSIONに挿入して、 さらにリクエストしてきたユーザに対してセッションIDを発行する関数です。

devid
質問者

補足

session_start()は行っています。 $SESSION['foo'] = array(); の宣言無しに 配列変数は使用できるのでしょうか? 宣言無しでOK?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セッション変数と配列

    通常の変数であれば、 $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です

    • ベストアンサー
    • PHP
  • 配列型の宣言?

    こんにちは。 あるサイトで見たphpのサンプルなのですが、 postされた全ての値を配列に格納するもので、以下のような記述がありました。 foreach((array)$_POST as $key => $value){  $array[$key] = $value; } ポストされた全ての値を、配列$arrayに連想配列として格納しているのはわかるのですが、 foreachの、(array)というのはどういう働きをするものなのでしょうか。 これは、$_POSTが配列であるという宣言でしょうか。 それと、postされた値がない場合、$_POSTを配列だと宣言しておくことで、foreachのエラーを回避するような役割もあるのでしょうか。 恥ずかしながら、(array)のような記述をphpではあまり見ないような気がするのですが、なんというキーワード(?)で勉強すれば理解が深められるかもご教授頂けますと助かります。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • セッションの削除

    例えば www.hoge.com/foo/index.php で session_start(); setcookie("bar",session_id(), time()+3600); として画面遷移を行いながら登録作業を行い、 完了画面regist.php で session_start(); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000); } session_destroy(); としましたが$_COOKIE["bar"]が初期化されません。 どのようにしたら良いでしょうか? 教えてください。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • session_unsetを使う利点

    session_unset()を実行すると$_SESSIONが要素数0の配列になりました。 $_SESSION=array();とするのと何が違うのですか?

    • ベストアンサー
    • PHP
  • セッション

    phplibを使わないでユーザ認証を用いたwebサイトを作ろうと思います。 shinki.php => login.php => contents1.php=> contents2.php .... のような流れの構造で、直接contents1.phpなどに入られないようにセッションを使用したいと思います。 ユーザが持っているセッション名と、サーバー側のセッション名が一致するという条件だけでログインしたユーザと考えていいのでしょうか? 現在はこのような感じになっています。 まずshinki.phpでユーザー登録します。この時ユーザ情報と暗号化されたパスワードをDBに保存。 login.phpでユーザIDとパスワードを入力し、DBのデータと一致するとcontents1.phpに進む。この時セッションを発行し、idと暗号化されたパスワードをセッションに記憶させる。 contents(1 | 2).phpのコード <? session_start(); // PostgreSQL 接続 if (!($cn = pg_connect("dbname=****"))){die;} // SQL文 $sql = "select * from ***** where id='$_SESSION[id]'"; if (!($rs = pg_exec($sql))) {die;} $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $array = pg_fetch_array($rs, $i); } // セッションのパスワードとデータベースのパスワードが一致 if($_SESSION[pass] == $array['pass']){ login_html(); }else{ print "ログインしてください。"; } // PostgreSQL 切断 pg_close($cn); function login_html(){ print "<html><head><title><title></head><body>"; .... .... } ?> このような構造には、セキュリティー的な問題はあるのでしょうか? おそらくいろいろ問題があると思いますので、ご指導お願いします。 一般的なパスワード制のページではどのような処理をしているのでしょうか? よろしくお願いします。 os:linux httpd:apache1.3.27 postgreSQL php4.x.x

    • ベストアンサー
    • PHP
  • セッション機能で

    セッション機能を利用するときに、セッション変数を宣言しますよね。 セッション変数を配列として使いたい場合にはどのように宣言すればよいのでしょうか? 実際のスクリプト内では session_start(); session_cache_limiter('limit'); session_register("hoge"); のように記述していますが、どうもうまく動作しません。 何か間違っている点があればご指摘・アドバイスをいただければありがたいです。 よろしくおねがいします。

    • 締切済み
    • PHP
  • sessionうまくいかない

    sessionの勉強のためにphpで簡単なページを作ってみたのですが、 sessionIDが次のページに送れてないみたいで、うまくいきません。 1ページ目 @session_start(); print session_id(); $_SESSION["ID"]=session_id(); 2ページ目 @session_start(); print session_id(); sessionの記述はこのようにしています。 環境は Windows Vista IE7 PHP5 Apache2.2 です。 よろしくお願いします。

    • 締切済み
    • 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
  • 配列の宣言のときに数字を指定しないと?

    配列の宣言の時に、例えば、 xx = new Array(3); のように3を指定しないで xx = new Array(); とすると、どういう処理になるのでしょうか? よろしくお願いします。

  • セッションについて

    PHPのセッションについてご教授ください。 session_start()の前でセッション名の変更を行うと、セッションidが受け渡されず、次ページが新規セッションとなってしまいます。クッキーを使った解決法を探してます。 セッション名を変更した場合、どのように解決すればよいでしょうか。初心者なのですが、一生懸命勉強中なので、宜しくお願いします。 開発環境: apache2.2 php 5.2 ページ1ソース <?php function main(){ session_name('member'); <= この行をコメントアウトすると、受け渡しできます session_start(); $_SESSION['test'] = 'test'; } main(); ?> <a href="sesstest2.php">test</a> ページ2ソース <?php session_start(); echo $_SESSION['test']; ?>

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • カルロス・ゴーンの逃亡を助けた元米軍特殊部隊グリーンベレー隊員とその息子が日本の拘置所にいる理由について考えます。
  • 彼らがなぜランボーのように拘置所を逃げ出さないのか、また彼らが日本に来た理由や逃亡資金の問題についても考察します。
  • お金の力は人の理性を狂わせるほど偉大なのか、カルロス・ゴーンの報酬と金銭の魔力についても考えてみます。
回答を見る