好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

在thinkphp3中如何处理cookie数组 - Thinkphp

在thinkphp3中如何处理cookie数组

最近玩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 );  ?> 

查看更多关于在thinkphp3中如何处理cookie数组 - Thinkphp的详细内容...

  阅读:76次