[英]Unserialize PHP session data
我正在使用CodeIgniter 3.x與數據庫會話驅動程序,我想訪問BLOB
類型的data
cloumn。 這是我的blob數據:
__ci_last_regenerate|i:1435420891;identity|s:13:"john@doe.com ";username|s:13:"johndoe";email|s:13:"john@doe.com ";user_id|s:1:"5";old_last_login|s:10:"1435412865";
我嘗試使用unserialize($string)
但沒有工作!
unserialize():偏移0處的錯誤
我如何訪問blob數據元素? 例如: $user['email']
沒有直截了當的方法...你可以使用session_decode() ,但它要求你已經有一個活動會話,這樣它就可以將解碼后的數據放入$_SESSION
。
但是,我必須告訴你,如果你想這樣做 - 你做錯了。 您永遠不應該訪問其他用戶的會話。 如果某些數據綁定到對擁有會話的用戶不明確的會話,則應該只在會話表中添加另一個字段並將其保存在那里。
我在這里得到了解決方案
所以我使用了會話解碼http://php.net/session_decode
session_decode('__ci_last_regenerate|i:1446535049;ci_UserID|s:1:"2";ci_UserName|s:24:"example@xyz.com";logged_in|b:1;');
因此會話解碼在正常的php會話中存儲了所有加密數據。
我可以使用以下方式訪問:
echo $_SESSION['ci_UserID'];
正如Narf所說,沒有簡單的方法可以做到這一點。
ykay; s解決方案預先假定您正在使用當前內置的會話處理程序。 這可以由應用程序隨時更改,並且無法保證PHP將保留此格式。
您的解決方案會破壞當前會話並將其替換為存儲的數據(但至少它將使用“當前”序列化方法)。
可以在運行時覆蓋序列化函數和session_函數的讀/寫操作。 只要您回讀使用與解碼相同的機制編碼的數據,您的機制就會起作用 - 但這對於長期存儲數據或在無法保證PHP安裝讀取的一致性的上下文中使用是一種糟糕的方法數據。
解決在用戶會話之外讀取會話數據問題的正確方法是使用serialize / unserialize格式:
ini_set("session.serialize_handler", 'php_serialize');
然后使用unserialize()來讀取數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.