[PHP-users 34701] セッション変数がセッション変数にならない

View: New views
8 Messages — Rating Filter:   Alert me  

[PHP-users 34701] セッション変数がセッション変数にならない

by 朧月-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

お世話になってます、朧月です。

Linux(Debian4) + Apache2 + PHP5 の環境でプログラムを動かしています。

セッション変数を大量に使ったプログラムを書いているのですが、どうもうまく
いきません。大枠の流れは以下のような感じです。

�a.phpとb.phpの二つを用意する
�a.phpにてセッション変数を確保
�a.phpからheader(Location: "./b.php")でb.phpに移行

a.php中のコードは下記のような感じです
session_start();

for ($i = 0; $i <= 1000; $i++){
  $_SESSION[$i] = $i;
}

header(Location: "./b.php");

というようになっています。a.phpにて下のコードを動かすと、私のイメージ通
りになります。

foreach($_SESSION as $key => $val){
  print $key;
}

とした場合、$keyの値(表示)は、123・・・・・1000のようになるのですが、
b.phpで上のforeachのコードを動かすと、何も表示されないか、$iと表示されます。

a.phpともb.phpとも、実際は他にも色々書いてます。

なんかこう、セッション変数を一度に大量に確保するのは反則のような気がする
のですが、反則なんでしょうか?

よろしくお願いします。


--
朧月
mailto:oboro@...

_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34702] Re: セッション変数がセッション変数にならない

by "鈴木孝征 (Suzuki Takamasa)" :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

朧月様へ。鈴木と申します。

> header(Location: "./b.php");

セッションIDがブラウザーに渡されていないということはありませんか。

b.phpでvar_dump($_REQUEST)としたときにセッションIDがきていることが確認で
きますでしょうか。

header関数の出力とsession_start関数による出力の順番が気になります。
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34703] Re: セッション変数がセッション変数にならない

by Masayuki Tadano :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> お世話になってます、朧月です。

ただのと申します。

a.php で、表示を行った際に、セッションファイルには内容が保存されている
ことは確認されましたか?。
a.php で表示をしているだけでは、セッション情報として保存されていると事
にはならないと思います。

で、$_SESSION 変数は、基本的に連想配列なので、数値インデックスでは
なくて、添字が文字だと思うんですね。
なので、

for ($i = 0; $i <= 1000; $i++){
  $_SESSION[$i] = $i;
}


for ($i = 0; $i <= 1000; $i++){
  $_SESSION[ 'aaa' . $i ] = $i;
}

とかするとどうですか?。

あと、

> header(Location: "./b.php");

は、

header("Location: ./b.php");

ですよね。


--
Masayuki Tadano <duke.tadano@...>
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34704] Re: セッション変数がセッション変数にならない

by 菊澤 正明 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


菊澤と申します。

ただのさんのご指摘が正しいかと。

マニュアルのセッション処理-例.$_SESSIONでの変数を登録より抜粋

連想配列$_SESSIONのキーは、PHPの通常の変数名と同じ制限があります。
すなわち、数字で始まることはできず、文字ま たはアンダースコアで始まる
必要があります。

$_SESSIONのキーに数値を使うことはできないためかと思われます。。

On Thu, 20 Aug 2009 09:46:13 +0900
朧月 <oboro@...> wrote:

> お世話になってます、朧月です。
>
> Linux(Debian4) + Apache2 + PHP5 の環境でプログラムを動かしています。
>
> セッション変数を大量に使ったプログラムを書いているのですが、どうもうまく
> いきません。大枠の流れは以下のような感じです。
>
> �a.phpとb.phpの二つを用意する
> �a.phpにてセッション変数を確保
> �a.phpからheader(Location: "./b.php")でb.phpに移行
>
> a.php中のコードは下記のような感じです
> session_start();
>
> for ($i = 0; $i <= 1000; $i++){
>   $_SESSION[$i] = $i;
> }
>
> header(Location: "./b.php");
>
> というようになっています。a.phpにて下のコードを動かすと、私のイメージ通
> りになります。
>
> foreach($_SESSION as $key => $val){
>   print $key;
> }
>
> とした場合、$keyの値(表示)は、123・・・・・1000のようになるのですが、
> b.phpで上のforeachのコードを動かすと、何も表示されないか、$iと表示されます。
>
> a.phpともb.phpとも、実際は他にも色々書いてます。
>
> なんかこう、セッション変数を一度に大量に確保するのは反則のような気がする
> のですが、反則なんでしょうか?
>
> よろしくお願いします。
>
>
> --
> 朧月
> mailto:oboro@...
--------------------------------------------
菊澤 正明  mailto:kikuzawa@...


_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34705] Re: セッション変数がセッション変数にならない

by c-atwork :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

加藤です

興味あったので、実証するためにいろいろと検証していました。
一足遅れですが、ただのさんのご回答で正解です。

$_SESSION[$i] = $i;

$_SESSION["val".$i] = $i;
などとすると正常に動くことを確認いたしました。

> お世話になってます、朧月です。
>
> Linux(Debian4) + Apache2 + PHP5 の環境でプログラムを動かしています。
>
> セッション変数を大量に使ったプログラムを書いているのですが、どうもうまく
> いきません。大枠の流れは以下のような感じです。
>
> �a.phpとb.phpの二つを用意する
> �a.phpにてセッション変数を確保
> �a.phpからheader(Location: "./b.php")でb.phpに移行
>
> a.php中のコードは下記のような感じです
> session_start();
>
> for ($i = 0; $i <= 1000; $i++){
>   $_SESSION[$i] = $i;
> }
>
> header(Location: "./b.php");
>
> というようになっています。a.phpにて下のコードを動かすと、私のイメージ通
> りになります。
>
> foreach($_SESSION as $key => $val){
>   print $key;
> }
>
> とした場合、$keyの値(表示)は、123・・・・・1000のようになるのですが、
> b.phpで上のforeachのコードを動かすと、何も表示されないか、$iと表示されます。
>
> a.phpともb.phpとも、実際は他にも色々書いてます。
>
> なんかこう、セッション変数を一度に大量に確保するのは反則のような気がする
> のですが、反則なんでしょうか?
>
> よろしくお願いします。
>
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> PHP-users mailing list  PHP-users@...
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3

_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34706] Re: セッション変数がセッション変数にならない

by 朧月-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

お世話になってます、朧月です。

鈴木孝征 (Suzuki Takamasa) wrote (2009/08/20 10:30):

> b.phpでvar_dump($_REQUEST)としたときにセッションIDがきていることが確認で
> きますでしょうか。

array(1) { ["PHPSESSID"]=> string(32) "12a6643c25a48c1d7d3aa43acd784c4f" }

b.phpにて以上の用に出力されるのですが、意味はちょっと分からない感じです。

> header関数の出力とsession_start関数による出力の順番が気になります。

session_start関数は一番最初に書かないと動かなかったような気がします。
a.phpの中身は以下の通りです。

<?php
        session_start();

for ($i = 0; $i <= 1000; $i++){
  $_SESSION[$i] = $i;
}

header("Location: ./b.php");

?>

よろしくお願いします。


--
朧月
mailto:oboro@...
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34707] Re: セッション変数がセッション変数にならない

by 朧月-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

お世話になってます、朧月です。

菊澤 正明 wrote (2009/08/20 10:58):

> 連想配列$_SESSIONのキーは、PHPの通常の変数名と同じ制限があります。
> すなわち、数字で始まることはできず、文字ま たはアンダースコアで始まる
> 必要があります。
>
> $_SESSIONのキーに数値を使うことはできないためかと思われます。。

まさにその通りでした。ただのさんのご指摘の通りにコードを書いたら、うまく
行きました。出力は以下の通りです。

aaa0aaa1aaa2aaa3aaa4aaa5aaa6aaa7aaa8aaa9aaa10aaa11aaa12aaa13aaa

ありがとうございました。


--
朧月
mailto:oboro@...
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34708] Re: セッション変数がセッション変数にならない

by Masayuki Tadano :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

ただの@凄く久しぶりに投稿している です。

> お世話になってます、朧月です。
>
> 菊澤 正明 wrote (2009/08/20 10:58):
>
>> 連想配列$_SESSIONのキーは、PHPの通常の変数名と同じ制限があります。
>> すなわち、数字で始まることはできず、文字ま たはアンダースコアで始まる
>> 必要があります。
>>
>> $_SESSIONのキーに数値を使うことはできないためかと思われます。。
>
> まさにその通りでした。ただのさんのご指摘の通りにコードを書いたら、うまく
> 行きました。出力は以下の通りです。
>
> aaa0aaa1aaa2aaa3aaa4aaa5aaa6aaa7aaa8aaa9aaa10aaa11aaa12aaa13aaa

うまく行ってよかったです。

以下は、ご存知ならば無視してください。

今回のように、セッション変数に代入したのに、伝わらないと言う時には、
そのスクリプト内で値を参照して見てもダメです。
セッション情報として保存されるためには、標準的には(Linuxでは)、

/tmp/sess_[セッションID]

というファイルが出来、この中にセッション情報がシリアライズされたもの
が書き込まれます。なので今回の件では、このファイルが出来ていたも
のの、中身が空っぽだったのではないでしょうか。

また、鈴木さんのご指摘&その結果で、

> 鈴木孝征 (Suzuki Takamasa) wrote (2009/08/20 10:30):
>
>> b.phpでvar_dump($_REQUEST)としたときにセッションIDがきていることが確認で
>> きますでしょうか。
>
> array(1) { ["PHPSESSID"]=> string(32) "12a6643c25a48c1d7d3aa43acd784c4f" }
>
> b.phpにて以上の用に出力されるのですが、意味はちょっと分からない感じです。

ここに表示されているのが、セッションIDなわけですので、
先ほどのファイルでは、

/tmp/sess_12a6643c25a48c1d7d3aa43acd784c4f

というのが作成されているはずです。もともとのプログラムでは、このファイル
のサイズが0バイトになっていたはずです(一応確かめました)。

あとは、リクエストごとにセッションIDが変ってしまって、値が
取得できないという事もあります。

この場合、IEですとセッションクッキーもその都度確認の
ダイアログを表示させることができるので、それで調べて
見る方法があります。

一応ご参考までに。

--
Masayuki Tadano <duke.tadano@...>
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3