$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,如果用户已申请,它将弹出消息instate再次查询,如果没有cookie,它将检查db并更新cookie。
我将数组(unserialize)存储到cookie中,并使用in_array进行检查。
但是,如果用户尝试更改我的Cookie,则反序列化会出错。
是否可以设置like- if unserialize=FALSE apply_cookie=array();
类似的东西
答案 0 :(得分:1)
unserialize
如果失败则返回false
。
$apply_cookie = @unserialize($apply_cookie);
if ($apply_cookie === false) {
$apply_cookie = array();
}
答案 1 :(得分: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...
}
}
?>
答案 2 :(得分: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
。