91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php中magic_quotes_gpc對unserialize的影響有哪些

發布時間:2020-12-11 15:29:50 來源:億速云 閱讀:161 作者:Leah 欄目:開發技術

php中magic_quotes_gpc對unserialize的影響有哪些?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

magic_quotes_gpc是一個php中一個給單雙引號增加一些安全過濾的函數,但此函數對于我們使用unserialize函數時會產生一些影響,下面我們就這個問題與大家看幾個實例與解決辦法.

昨天朋友讓我幫他解決下他網站的購物車程序的問題,程序用的是PHPCMS,換空間前是好的,剛換的空間,具體問題是提示成功加入購物車后跳轉到購物車頁面,購物車里為空.

我看了下代碼,大致的原理就是將產品ID與數量存放到數組中,然后序列化后存入COOKIE中,在購物車頁面反序列化COOKIE,得到這個數組并讀出對應產品信息.

調試一下發現問題出現在unserialize上,我先根據它的購物車原理寫了段代碼,代碼如下:

<?php    
    header("Content-type: text/html; charset=utf-8");        $magic = get_magic_quotes_gpc() ? "開啟" : "未開啟";               $str = array(array('goods_id'=>13,'number'=>1));        setcookie("cart", serialize($str));        echo "magic_quotes_gpc: ".$magic."<br>";        echo $_COOKIE['cart']."<br>";        print_r(unserialize($_COOKIE['cart']));    ?>

大家執行下這段代碼可以發現,當你的magic_quotes_gpc關閉時這段程序執行沒有任何問題,但是magic_quotes_gpc開啟時你會發現反序列化并不成功,這時你可能就知道問題出在哪了?

原因是magic_quotes_gpc開啟時,系統會自動對POST GET COOKIE的結果中的單引號進行轉義,加上\,所以$_COOKIE['cart']的值就變成了a:1:{i:0;a:2:{s:8:\"goods_id\";i:13;s:6:\"number\";i:1;}},這樣的話unserialize是無法反序列化成功的,就出現了問題.

解決的辦法簡單來說就是將unserialize($_COOKIE['cart'])改成unserialize(stripslashes($_COOKIE['cart'])),在COOKIE前加上stripslashes,去掉轉義符,這樣就沒問題了.

對于cookie影響我們再做個測試:

1.問題:項目數據需要序列化保存在cookie中,然后再獲得cookie的數據反序列,獲得原數據,代碼如下:

$a[0] = array("key"=>"哈  邏");   
$a[1] = array("key"=>"哈 邏");   $jsona = json_encode($a);   setcookie("testcookie","");setcookie("testcookie",$jsona);   var_dump($jsona,true); //正常取值   var_dump(json_decode($_COOKIE['testcookie'],true)); //取不到值

在沒有經過cookie賦值時,正常反序列化,經過cookie之后,取到值為空.

2.分析,代碼如下:

$a[0] = array("key"=>"哈  邏");   
$a[1] = array("key"=>"哈 邏");   $jsona = json_encode($a);   var_dump($jsona); //string(50) "[{"key":"\u54c8 \u903b"},{"key":"\u54c8 \u903b"}]"   setcookie("testcookie","");   setcookie("testcookie",$jsona);   var_dump($_COOKIE['testcookie']); // string(62) "[{\"key\":\"\\u54c8 \\u903b\"},{\"key\":\"\\u54c8 \\u903b\"}]"   var_dump(json_decode($_COOKIE['testcookie'],true));

對比了一下數據,經過cookie處理后多了幾個//,解決方法,代碼如下:

var_dump(json_decode(stripslashes($_COOKIE['testcookie']),true));   var_dump(json_decode(str_replace("\\","",$_COOKIE['testcookie']),true));

3.總結:magic_quotes_gpc在開啟的情況下,會影響通過get|post|cookies獲得的數據.所以我們在get|post|cookies處理數據的時候,首先判斷magic_quotes_gpc開啟情況.

① 在開啟情況下,處理數據需要stripslashes

② 在沒有開啟情況下,接受數據先addslashes,處理數據stripslashes

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

康乐县| 晋城| 榆社县| 台山市| 滕州市| 林甸县| 恭城| 中方县| 凌源市| 堆龙德庆县| 昭觉县| 饶平县| 星子县| 甘孜| 莲花县| 洛南县| 太白县| 信宜市| 平乡县| 理塘县| 永平县| 彩票| 邢台市| 文登市| 黄梅县| 高州市| 灵璧县| 普陀区| 阿拉善盟| 五大连池市| 晋江市| 沭阳县| 河西区| 和硕县| 忻城县| 铜陵市| 双江| 临颍县| 铜川市| 新绛县| 宁都县|