読者です 読者をやめる 読者になる 読者になる

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

主にスマホネイティブ関連Tips。たまにWebも書きたい。お腹はぷよぷよ

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