簡體   English   中英

如何在自定義處理程序中反序列化會話數據

[英]How to unserialize session data in a custom handler

我使用sessionHandlerInterface將會話保存在數據庫中。 一切正常。 但我想從數據庫中獲取所有序列化數據

SELECT data FROM session;

並希望他們在輸出數據時解碼數據。 我已經嘗試使用session_decode()操作$_SESSION數組本身,這會導致麻煩。 我只想獲取序列化數據並返回解碼數據。

這是data列中保存在數據庫中的示例會話數據

fb_422782977793963_code | S:216: “AQAVKa4Q8sOuioW75V9Ls-cDUEizgJDX5ZkRVLArDlroFvvhasdwKvbyzKEwiMVrN7nc5ghMaw0W67jQu5kt_sc_Edm9sABzB5PakdkUpXr52AViTOltPfPBQHM9T-JoGOQ4gasdbssC8Xt93NKFvdV7XRZ7ZYGZqIsu5SFpfFBHK_hNGDdRVbnbe_xUZVP9WI4h0jDy”; fb_422782977793963_access_token | S:111: “AAAGAhasdaAKL7hAvXRv6FHUj1Tk24r7j4NqDwWWUzmXDZA2Igsb1pHjuP4jbBRNKfeYzutm0MFmgxuKPg1n0NEbvZAXM3bwoNZBiZCgZDZD”; fb_422782977793963_user_id | S:15: “100004835469598”;圖像| S:61:的“http://m-static.ak .fbcdn.net / rsrc.php / V2 /喲/ R / sdIqmHJn-SK.gif“;

它在正常的會話處理中工作正常,它會按原樣讀寫和寫入數據庫。

我想獲得活動會話的所有數據。 如果我使用SELECT數據FROM會話。 它返回上面的會話數據(編碼)我想得到它的解碼數據。

PHP serialize和反unserialize函數不能用於序列化和反序列化會話數據。 即使(默認-只有在默認情況下),序列化可能看起來相似,存在對關心一個變量的內容這兩個功能的一個重要的區別:

這些[sessions]是帶有變量名的序列化值列表。

來自: 序列化自述文件

因此,您需要創建自己的session_unserialize函數,該函數能夠解碼從數據庫返回的字符串(例如,通過session_decode )。 注意這需要其中的所有內容,例如,如果會話包含序列化對象,則需要加載類定義。

示例性session_unserialize函數可能看起來像( 采用來自: 與會話相關的答案 ):

function unserialize_session($data) {
    $hasBuffer = isset($_SESSION);
    $hasBuffer && $buffer = $_SESSION;
    session_decode($data);
    $session = $_SESSION;
    $hasBuffer ? $_SESSION = $buffer : unset($_SESSION);
    return $session;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM