ホームページ  >  記事  >  バックエンド開発  >  [php] PHP でセッション データをシリアル化、シリアル化解除する

[php] PHP でセッション データをシリアル化、シリアル化解除する

WBOY
WBOYオリジナル
2016-06-23 14:35:371172ブラウズ

ご存知のとおり、PHP では session_encode() と session_decode() を使用してセッション データをエンコード/デコードできますが、これら 2 つの

機能を試してみると、思い通りにいかないことがわかるでしょう。考える。そこで、これを行うのに役立つ 2 つの機能をここで見つけます。

/* *
* セッションのシリアル化
*
* @param array $data
* @param boolean $safe
* @return string
*/
function serialize_session( $array, $safe = true)
{
// セッションは、希望しない場合でも参照として渡されます
if ( $safe)
{
$array = unserialize( Serialize( $array));
}

$raw = '';
$line = 0;
$keys = array_keys( $array);
foreach ( $keys as $key)
{
$value = $array[ $key];
$line++;
$raw .= $key 。 '|';
if ( is_array( $value) && isset( $value['huge_recursion_blocker_we_hope']))
{
$raw .= 'R:' 。  $value['huge_recursion_blocker_we_hope'] 。 ';';
}
else
{
$raw .= serialize( $value);
}
$array[ $key] = Array('huge_recursion_blocker_we_hope' => $line);
}

return $raw;
}

/* *
* セッションのシリアル化解除
*
* @param string $data
* @return array
*/
関数unserialize_session( $data)
{
$vars = preg_split('/([a-zA -Z_x7f-xff][a-zA-Z0-9_x7f-xff^|]*)|/', $data, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
for ( $i = 0; $vars[ $i]; $i++)
{
$result[ $vars[ $i++]] = unserialize( $vars[ $i]);
}
$result を返す;
}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。