2011-01-03 7 views
1

PHPのsession_decode()関数に、 'R'で指定されたPHP参照変数のオブジェクト型があることに気づきました。しかし、私はこのオブジェクト型を出力するsession_decode()を取得する方法を見つけることができないようです。参照変数を$ _SESSIONに代入してからsession_decode()を呼び出すと、参照変数はsession_decode()によって参照される変数と同じオブジェクト型を持ち、 'R'ではなく、表現されます。 session_decodeオブジェクト型 'R'のユースケースは何ですか?session_decodeの結果でPHP参照変数を取得する方法

+0

生成される形式は、文書化されていないIIRCです。したがって、フォーマットをリバースエンジニアリングすることはできますが、奇妙な動作や曖昧な動作に遭遇した場合には驚くことはありません。私は出発点としてCのソースをチェックアウトすることをお勧めします...ああ、 'R'はおそらく"リソース "であり、参照ではありません... – ircmaxell

+0

http://php.net/manual/en/function.session- decode.php#56106参照リソースではありません – stevebot

答えて

2

session_encodeは、変数を参照としてエンコードするために、参照される変数もセッションに入る必要があります。セッション中でなければ、元のタイプとしてエンコードします。

$foo = 'bar'; 
$_SESSION['foo'] = $foo; 
$_SESSION['bar'] = &$_SESSION['foo']; 
$_SESSION['baz'] = &$foo; 
$_SESSION['hey'] = &$foo; 
var_dump(session_encode()); 

出力:あなたが見ることができるように

foo|s:3:"bar";bar|R:1;baz|s:3:"bar";hey|R:2; 

は、fooは文字列として格納されています。 barfooへの参照として格納されていますが、bazはローカル変数$fooを参照しているため、セッションが他の場所でデコードされたときには存在しない可能性があるため、PHPは自動的に元の文字列型に変換します。しかし、hey$fooへの参照ですが、参照変数はbazとして保存されているため、PHPはbazへの参照としてheyをエンコードします。

+0

セッションでエンコードされた参照変数の値が混乱しています。 $ _SESSIONのインデックスですか? – stevebot

+1

@stevebot:参照を除いて、$ _SESSIONの1つのインデックスのようです(なぜ、 'hey'は3ではなく2を持つのです)。 'bar'を非参照に変更すると、' hey'参照番号は3になります。 – netcoder

+0

ああ、ありがとう、ありがとう。 – stevebot

0

ああ、私はそれが何をしているかを見ていると思います。このような何かをやってみます(任意の運を持つ)参照型をトリガすべき

array(
    0 => array(
     0 => 1 
    ), 
    1 => &array(
     0 => 1 
    ), 
) 

$array = array(array(1)); 
$array[1] =& $array[0]; 

だから今、配列は次のようになります。

関連する問題