おじゃまぷよ系エンジニアメモ

アプリエンジニアからサーバーとインフラエンジニアに転身しました

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に上書きされた。
これは騙される。完全にまるっと置き換えられると思ってたけど、そうじゃなかった。