PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPセッションでオブジェクトを保存・復元する方法:serialize()とunserialize()の使い方

PHPでオブジェクトをセッションに保存する場合、保存前にserialize()関数を使用し、セッションからオブジェクトを取り出す際にはunserialize()関数を呼び出します。

serialize()関数は、特定の値を保存可能な形式(バイトストリーム)へと変換する役割を担います。この変換を行うことで、データをファイルやメモリバッファに格納したり、ネットワーク経由で送受信したりすることが可能になります。

serialize()を使ってオブジェクトをセッションに保存する

session_start();
$object = new sample_object();
$_SESSION['sample'] = serialize($object);

まずsession_start()関数でセッションを開始し、新しいオブジェクトを生成します。生成したオブジェクトはserialize()関数でシリアル化した上で、$_SESSION変数に代入して保存します。

サンプルコード

<?php
$data = serialize(array("abc", "defgh", "ijkxyz"));
echo $data;
?>

出力結果

a:3:{i:0;s:3:"abc";i:1;s:5:"defgh";i:2;s:6:"ijkxyz";}

このように、配列やオブジェクトが文字列形式に変換されて出力されます。各要素の型(s=string)と長さが記録されているのが分かります。

unserialize()を使ってオブジェクトを復元する

session_start();
$object = unserialize($_SESSION['sample']);

ここでも通常どおりsession_start()関数でセッションを開始します。その後、以前に$_SESSION変数へ代入して保存しておいたシリアル化されたデータを、unserialize()関数で元のオブジェクトに復元します。

サンプルコード

<?php
$data = serialize(array("abc", "defgh", "ijkxuz"));
echo $data . "<br>";
$test = unserialize($data);
var_dump($test);
?>

出力結果

a:3:{i:0;s:3:"abc";i:1;s:5:"defgh";i:2;s:6:"ijkxuz";}
array(3) { [0]=> string(3) "abc" [1]=> string(5) "defgh" [2]=> string(6) "ijkxuz" }

var_dump()の出力を見ると、シリアル化前の配列が完全な形で復元されていることが確認できます。

注意点

  • セッションにオブジェクトを保存する場合、そのクラス定義が復元時にも読み込まれている必要があります。クラスが未定義の状態でunserialize()を実行すると、__PHP_Incomplete_Classという不完全なオブジェクトになってしまいます。
  • ユーザー入力など信頼できないデータを直接unserialize()に渡すのは危険です。オブジェクトインジェクション攻撃の原因となるため、外部からのデータにはjson_encode()/json_decode()の利用を検討してください。
  1. PHPのget_class()関数とは?使い方とサンプルコードを解説

    PHPのget_class()関数は、オブジェクトが属するクラス名を取得するための関数です。引数に渡された値がオブジェクトでない場合にはFALSEを返します。また、クラス内部でobject引数を省略して呼び出した場合には、そのクラス自身の名前が返されます。構文get_class(object)パラメータobject  − 検査対象となるオブジェクトです。クラスの内部で呼び出す場合は、このパラメータを省略できます。戻り値get_class()関数は、指定されたオブジェクトのクラス名を文字列として返します。引数がオブジェクトでない場合はFALSEを返します。クラス内部

  2. PHPのget_object_vars()関数の使い方を徹底解説

    PHPのget_object_vars()関数は、指定されたオブジェクトが持つプロパティを取得するための関数です。オブジェクト内で定義されているプロパティを、プロパティ名をキーとした連想配列の形式で返します。 構文 get_object_vars(object) パラメータ object − プロパティを取得したいオブジェクトのインスタンスを指定します。 戻り値 get_object_vars()関数は、指定されたオブジェクトの定義済みプロパティを連想配列として返します。まだ値が代入されていないプロパティについては、NULLが返されます。 なお、この関数をクラスの外部から呼び出した場合、取