UnexpectedValueException
が投入されるのはなぜsession_start()
ですか?
のプロパティを持つオブジェクトがありますSPLObjectstorage
。そのオブジェクトは次のようなセッションに割り当てられます
$_SESSION['foo'] = $barObject;
内部セッションのシリアル化に直面している問題をデコードすると思われます。セッションをデータベースに保存すると、シリアル化しているように見えますが、objectStorage
デコードできません。
サンプル セッション データ
self|O:4:"User":8:{s:5:"�*�id";N;s:7:"�*�nick";N;s:13:"�*�reputation";i:1;s:11:"�*�password";N;s:8:"�*�email";N;s:7:"�*�crud";O:10:"CRUDobject":2:{s:13:"�*�fieldCache";a:0:{}s:13:"�*�dependency";r:1;}s:7:"�*�auth";N;s:11:"�*�roleList";C:11:"RoleStorage":23:{x:i:1;N;,r:13;;m:a:0:{}}}
Rolestorage
上記の文字列の拡張もアイデアSPLObjectstorage
session_decode()
を返しますか?false
属性を削除すると、roleList
適切にシリアル化されます。
別々にしたら
$sr = serialize($roles); // $roles is RoleStorage object
var_dump($sr);
var_dump(unserialize($sr));
シリアルstring 'C:11:"RoleStorage":22:{x:i:1;N;,r:3;;m:a:0:{}}' (length=46)
化解除中に同じメッセージが表示されて失敗します。なぜこれが起こっているのかわかりません。
注: オブジェクトをRoleStorage
にアタッチする際に、オブジェクト自体をデータとして使用しました。参照として保存されていることを意味します。serialize()
(if) がこれを内部的に処理する方法がわかりません。