0

疲れすぎているのかもしれませんが、このコードのセッション ID が 149 から 143 になる理由がわかりません。

echo "session id is".$_SESSION['userid'];
$smarty->assign('itemresults',$arr2);

$_SESSION['userid']

if (isset($_REQUEST['id']))
{
    $userid=$_REQUEST['id'];
}
else
{
echo "session id 1 is".$_SESSION['userid'];
    $userid=$_SESSION['userid'];
}
echo "session id 2 is".$_SESSION['userid'];

出力:

session id is149session id 2 value is143

アップデート:

var $userid を変更すると問題はなくなりますが、$userid に値を割り当てると $_SESSION['userid'] も変更されるのはなぜですか??

以下のコードが機能します。

if (isset($_REQUEST['id']))
{
    $userid2=$_REQUEST['id'];
}
else
{
echo "session id 1 value".$_SESSION['userid'];
    $userid2=$_SESSION['userid'];
}
4

2 に答える 2

1

これregister_globalsは潜在的なセキュリティ ホール (お気づきのように非常に簡単に陥りやすい) であり、行き止まり (5.4 からはなくなりました) です。

http://www.php.net/manual/en/ini.core.php#ini.register-globals :

EGPCS (Environment、GET、POST、Cookie、Server) 変数をグローバル変数として登録するかどうか。

PHP 4.2.0 以降、このディレクティブはデフォルトでオフになっています。

関連情報については、 register_globals の使用に関するセキュリティの章をお読みください。

警告

この機能は PHP 5.3.0 で非推奨となり、PHP 5.4.0 で削除されました。

于 2013-08-01T15:21:03.993 に答える
0

$useridおそらく、セッション値を参照していますか?次のように多かれ少なかれ再現できます。

<?php
session_start();

// Put 10 in the session
$_SESSION['userid'] = 10;

// Get a reference to that session variable (note the `&`)
$userid = &$_SESSION['userid'];

// Increment
$userid++;

echo $_SESSION['userid'];  // 11
于 2013-08-01T14:54:11.110 に答える