0
$apply_id=25;

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

$apply_cookie=unserialize($apply_cookie);

//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=FALSE;//I don't want to query, so just set TRUE FALSE
    if($db==TRUE){
        echo "COOKIE=FALSE; DB=TRUE";

        $apply_cookie[]=$apply_id;
        $apply_cookie=serialize($apply_cookie);

        setcookie("apply", $apply_cookie);

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

        $apply_cookie[]=$apply_id;
        $apply_cookie=serialize($apply_cookie);

        setcookie("apply", $apply_cookie);
            //process the apply query...
    }
}

我已经为我的申请按钮设置了一个cookie,如果用户已申请,它将弹出消息状态再次查询,如果没有cookie,它将检查数据库并更新cookie。

我将数组(反序列化)存储到 cookie 中,并使用 in_array 进行检查。

但是,如果用户尝试更改我的 cookie,反序列化会出错。

有什么方法可以设置 -if unserialize=FALSE apply_cookie=array();

类似的东西

4

3 回答 3

1

unserializefalse如果失败则返回。

$apply_cookie = @unserialize($apply_cookie);
if ($apply_cookie === false) {
  $apply_cookie = array();
}
于 2013-06-22T16:34:10.167 回答
1

使用@unserialize@函数前面的 " " 将消除错误

<?php
  $apply_id = 25;
  if ( isset( $_COOKIE["apply"] ) ) {
    $apply_cookie = $_COOKIE["apply"];
  }

  $apply_cookie = ( isset( $apply_cookie ) ) ? @unserialize( $apply_cookie ) : array();
  $apply_cookie = ( is_array( $apply_cookie ) ) ? $apply_cookie : array();

  //HAVE COOKIE
  if ( in_array( $apply_id, $apply_cookie ) ) {
    echo "COOKIE=TRUE<BR>";
    print_r( $apply_cookie );
  }
  else {
    //NO COOKIE,DB HAVE RECORDED
    $db = false;
    if ( $db === true ) {
      echo "COOKIE=FALSE; DB=TRUE";
      $apply_cookie[] = $apply_id;
      $apply_cookie = serialize( $apply_cookie );
      setcookie( "apply", $apply_cookie );
    }
    else {
      //NO COOKIE,NO RECORDED
      echo "COOKIE=FALSE, DB=FALSE";
      $apply_cookie[] = $apply_id;
      $apply_cookie = serialize( $apply_cookie );
      setcookie( "apply", $apply_cookie );
      //process the apply query...
    }
  }
?>
于 2013-06-22T16:39:01.277 回答
0

您应该使用$_SESSION而不是$_COOKIE. 用户输入是非常危险的
unserialzie

反序列化
http://www.php.net/manual/en/function.unserialize.php

警告
不要将不受信任的用户输入传递给unserialize()。由于对象实例化和自动加载,反序列化可能导致代码被加载和执行,恶意用户可能会利用这一点。如果您需要将序列化数据传递给用户,请使用安全、标准的数据交换格式,例如 JSON(通过json_decode()json_encode() )。

如果您定义如下类:

<?php

class TestClass {

    public function __destruct() {
        echo '__destruct() called';
    }

}

如果你得到序列化数据:

O:9:"TestClass":0:{}

将显示,__destruct() called

于 2013-06-22T16:40:10.653 回答