[PHP-users 28286] Re: セッション情報の更新条件
HOTTA Michihide
hotta @ net-newbie.com
2006年 2月 1日 (水) 15:04:12 JST
堀田@長崎市です。
On Mon, 30 Jan 2006 13:21:59 +0900, HOTTA Michihide <hotta @ net-newbie.com> wrote:
Subject: [PHP-users 28274] セッション情報の更新条件
> 堀田@長崎市%セッション変数初心者(?)です。
>
> $_SESSION をセッション情報(デフォルトはファイル)へ書き戻す際の
> 条件について教えてください。
(snip)
> このように、$_SESSION への変更が反映されていません。
>
> ちなみに
> $_SESSION = array(...)
> のように、代入時に変数を介さなければうまくいくようです。
> これはバグ?それとも仕様?
>
> リファレンスとかそのへんのからみかなぁとは思うんですが、どなたか
> この理由をわかりやすく説明していただけないでしょうか?
少し再現条件がわかってきました。こういうスクリプトでも再現します。
# PHP-5.1.2 です。
$remain = array('idx1', 'idx2', 'idx3'); // 残したいもの
foreach ($_SESSION as $key => $value) {
if (!in_array($key, $remain)) {
unset($_SESSION[$key]); // remain以外を未定義に
}
}
print_r($_SESSION);
以下のようにすれば、セッションファイルにも書き戻されます。
foreach ($_SESSION as $key => $value) {
if (!in_array($key, $remain)) {
$del[] = $key; // 削除対象のキーを登録
}
}
foreach ($del as $key) {
unset($_SESSION[$key]);
}
print_r($_SESSION);
いずれも、foreach の後の(スクリプト実行中の)$_SESSION は正しく
セットされているように見えるので、元々読み込んだ $_SESSION を指
しているポインタが書き変わってしまうような感じでしょうか?
--
HOTTA Michihide <hotta @ net-newbie.com>
PHP-users メーリングリストの案内