+ -
当前位置:首页 → 问答吧 → 在cookie设置数组--setcookie的优化

在cookie设置数组--setcookie的优化

时间:2009-01-13

来源:互联网

文章原地址:在cookie设置数组--setcookie的优化
作者:bkkkd
平常我们在设置数组时都是这样设置的
[php]
setcookie('var[a]','1');
[/php]
这样设置如果是一两个下标这样子还可以凑和着用,但如果要设置一个比较复杂的数组,那这样设置实在是太麻烦了。
所以我需要可以直接把数据设置到cookie上的函数。
[php]
function MyCookie($var,$value='',$lifetime='Y')
{
    if($value!='')
    {
        $value=base64_encode(serialize($value));
    }
    if($lifetime=='D')
    {
        $lifetime=time()+86400;
    }
    setcookie($var,$value,$$lifetime);
}
function GetCookie($var)
{
    $value='';
    if(array_key_exists($var,$_COOKIE)
    {
         $value=$_COOKIE[$var];
         $value=unserialize(base64_decode($value));
    }
    return $value;
}
[/php]
在设置cookie时是将数据先经过serialize将数据变成一个字符串,然后再经过base64_encode转化成一个没特殊符号的字符串。把这个字符串设置到cookie中。然后在得到cookie的数据时用getcookie函数取回对应的数据。
这样做的好处正如我之前说的,可以很方便得把数组甚至对像都保存在cookie中。方便进行设置及调用。
当然也会有不足的地方,那就是cookie可以保存的数据量会大大减小,因为保存了很多用于定义数据属性的内容。

作者: bkkkd   发布时间: 2009-01-13

我无知..

base64_encode 的作用是什么???

作者: 冯.于安   发布时间: 2009-01-13

避开GPC转义问题,当使用了serialize把数组转义成字符串后,如果服务器开了自动了转义,使用了base64_encode就可以完全避开这样的问题,其实还可以有别的方法,我只是选择了比较简单的方法来解决而已

作者: bkkkd   发布时间: 2009-01-13

没入库也转义?

作者: hedgelog   发布时间: 2009-01-13

cookie本来自己转义, 你非得去手工弄一下, 没办法.

作者: 冯.于安   发布时间: 2009-01-13

原帖由 hedgelog 于 2009-1-13 21:39 发表
没入库也转义?
cookie从客户端提交到服务器时,服务器有可能会转义。

作者: bkkkd   发布时间: 2009-01-14

原帖由 于安 于 2009-1-13 21:46 发表
cookie本来自己转义, 你非得去手工弄一下, 没办法.
不明白你的意思,什么cookie会自己转义?

作者: bkkkd   发布时间: 2009-01-14

为什么呢?回复:什么为什么??

作者: mizha   发布时间: 2009-01-14