首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组放入cookie中是否保存

问将数组放入cookie中是否保存
EN

Stack Overflow用户
提问于 2013-06-23 13:53:10
回答 1查看 105关注 0票数 0
代码语言:javascript
复制
$apply_id=1111;

if(isset($_COOKIE['apply'])){
    $apply_cookie=$_COOKIE['apply'];
    @$apply_cookie=gzuncompress($_COOKIE['apply']);}
else{$apply_cookie=array();}

$apply_cookie = @explode(',', $apply_cookie);
if($apply_cookie === false){$apply_cookie = array();}
else{
    $count=count($apply_cookie);
    for($n=0; $n<$count; $n++){
        if(!is_numeric($apply_cookie[$n])){unset($apply_cookie[$n]);}
    }   
}

//HAVE COOKIE
if(@in_array($apply_id, $apply_cookie)==TRUE){
    echo "COOKIE=TRUE<BR>";
    print_r($apply_cookie);
}
else{
    //NO COOKIE,DB HAVE RECORDED
    $db=TRUE; //QUERY HERE,SET TRUE OR FALSE FOR NOW
    if($db==TRUE){
        echo "COOKIE=FALSE; DB=TRUE";

        $apply_cookie[]=$apply_id;  
        $apply_cookie=implode(',', $apply_cookie);
        $apply_cookie=gzcompress($apply_cookie);    
        setcookie("apply", $apply_cookie, time()+3600*24*60);

    }
    else{
        //NO COOKIE,NO RECORDED
        echo "COOKIE=FALSE, DB=FALSE";

        $apply_cookie[]=$apply_id;
        $apply_cookie=implode(',', $apply_cookie);
        $apply_cookie=gzcompress($apply_cookie);    
        setcookie("apply", $apply_cookie, $apply_cookie, time()+3600*24*60);
    }
}

我设置了一个cookie来检查用户是否已经被应用。如果曲奇有记录的话。它将跳过该查询。如果没有cookie或记录,则查询db并更新cookie。

gzcompress(make it smaller)->explode(array)->is_number(only allow number) ->in_array(检查是否存在)

这足够安全了吗?(我之前使用的是serialize,但它似乎有点不安全)

只检查cookie记录是否存在,如果不存在,则查询并更新cookie

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-23 14:26:47

更好的解决方案是:

代码语言:javascript
复制
<?php

$apply_id = 1111;

switch (true) {

case !isset($_COOKIE['apply']):
case ($apply_cookie = @gzuncompress($_COOKIE['apply'])) === false:
case !is_array($apply_cookie = json_decode($apply_cookie)):
    $apply_cookie = array();
    break;
default:
    $tmp = array();
    foreach ($apply_cookie as $c) {
        if (is_string($c) && is_numeric($c)) {
            $tmp[] = $c;
        }
    }
    $apply_cookie = $tmp;
}

if (in_array($apply_id, $apply_cookie)) {
    // HAVE COOKIE
    echo 'COOKIE = TRUE<br />'.PHP_EOL;
    echo nl2br(print_r($apply_cookie, true));
} else {
    $db = true;
    // HAVE NO COOKIE
    if ($db) {
        // HAVE RECORDED
        $apply_cookie[] = $apply_id;
        setcookie('apply', gzcompress(json_encode($apply_cookie)), time()+3600*24*60);
        echo 'COOKIE = FALSE, DB = TRUE<br />'.PHP_EOL;
    } else {
        // HAVE NO RECORDED
        $apply_cookie[] = $apply_id;
        setcookie('apply', gzcompress(json_encode($apply_cookie)), time()+3600*24*60);
        echo 'COOKIE = FALSE, DB = FALSE<br />'.PHP_EOL;
    }
}

注意:你必须在任何输出之前进行setcookie。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17258075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档