最近玩thinkphp框架時,遇到cookie真讓人頭暈,網上百度了一下,找到的大概都是thinkphp2.0的資料,說在Think/Lib/Think/Util/Cookie.class.php中,但實際上thinkphp3.0已經將cookie移到ThinkPHP/Common/functions.php中,用test.php測試了一下cookie函數,發現cookie自動會將數組用json_encode連接再存儲,就像手冊上說的支持數組存儲,但實際上已經變成josn字符串了,還有原來的中文都變成了"/UXXXX"之類的字符,很時奇怪,后來查看cookie函數的原代碼,發現字符都被轉換成json_encode重新編碼了,與是解碼就找到辦法了,但接下來又遇到問題了,用json_decode($_COOKIE["userinfo"])在當前頁能得到原數組,但換一個頁面后結果居然為“NULL”,用$str=cookie("userinfo")進行讀取賦值,卻得到了:
- object(stdClass)#4 (3) {
- ["name"] => string(6) "張三"
- ["code"] => int(123)
- ["password"] => string(8) "22334455"
- }
$str得到的是一個類,作為類來處理的.
可我希望得到了是一個數組,于是dump($_COOKIE["userinfo"]),其結果居然"{/"name/":/"//u5f20//u4e09/",/"code/":123,/"password/":/"22334455/"}" ,也就是都被加了轉義字符,數字部分除外,終于找到原因了,解決起來就容易了,用stripslashes($_COOKIE["userinfo"]);//去除轉義字符后,再進行一次反向的編碼操作json_decode($str,true)就完成了,最后dump()打印結果,得到了正確的數組結果.
- array(3) {
- ["name"] => string(6) "張三"
- ["code"] => int(123)
- ["password"] => string(8) "22334455"
- }
實例代碼如下:
- <?php
- require_once "ThinkPHP/Common/functions.php";
- $user=array(
- "name" =>"張三",
- "code" =>123,
- "password" =>"22334455");
- cookie(userinfo,$user,time()+3600);
- var_dump($_COOKIE["userinfo"]);
- //重新讀取成數組
- $str=stripslashes($_COOKIE["userinfo"]);//去除轉義字符
- $userinfo=json_decode($str,true);
- var_dump($userinfo);
- ?>
新聞熱點
疑難解答
圖片精選