phpのsession_decodeはarray_mergeされる
あるときphpでscript書いてるときにハマった。 session_decode()したら$_SESSIONに配列がまるっと置き換えられると思ってたらどうも違ったらしい
<?php session_start(); $_SESSION = ['a' => 'b']; $data1 = session_encode(); $_SESSION = ['c' => 'd']; $data2 = session_encode(); $_SESSION = []; session_decode($data1); session_decode($data2); print_r($_SESSION);
session_decodeをした結果
( [c] => d )
こうなると思ってたら実際は
( [a] => b [c] => d )
こうなった。
<?php session_start(); $_SESSION = ['a' => 'b']; $data1 = session_encode(); $_SESSION = ['a' => 'd']; $data2 = session_encode(); $_SESSION = []; session_decode($data1); session_decode($data2); print_r($_SESSION);
同じキーを入れると
( [a] => d )
こうなって見事にキーの中身がbからdに上書きされた。
これは騙される。完全にまるっと置き換えられると思ってたけど、そうじゃなかった。