magic_quotes_gpc序列化的在PHP中的效果分析

本文分析了magic_quotes_gpc在PHP序列化的影响。分享给你供你参考。以下是如下:

magic_quotes_gpc是函数在PHP中,单、双引号加一些保安过滤器,但这个功能会对我们有影响序列化功能。在这里,我们将看到几个例子和解决这个问题的方法。

昨天,我的朋友请我帮他解决他的网站购物车程序的问题。用PHPCMS程序。在改变空间之前,它是好的,只是改变了空间。具体的问题是提示加入购物车,跳转到购物车页面,购物车是空的。

我看了代码。总的原则是存储阵列中的产品ID和数量,然后将其存储在cookie和序列化序列化之后,饼干在购物车页面,得到阵列的读取相应的产品信息。

在序列化调试发现问题,我先写了一个基于其购物车原理代码段,代码如下:

复制代码代码如下:< PHP

标题(内容类型:文本/ HTML;字符集= UTF-8);

魔法= get_magic_quotes_gpc美元()开放:打开;



$str =数组(array('ods_id= > 13,若干= > 1));

setcookie(车

magic_quotes_gpc回声:美元的魔力。;

echo $ _cookie { 'cart}。;

print_r(序列化($ _cookie { 'cart ' }));

>

如果你执行这个代码,你可以看到,当你的magic_quotes_gpc是封闭的,有这个程序的执行没有问题。但当magic_quotes_gpc是开放的,你会发现,反序列化不成功。然后你可能知道问题出在哪里。

原因是,magic_quotes_gpc是开放的,系统会自动把饼干后单引号在逃跑的结果,加上,所以价值为_cookie { } 'cart成为:1:{我:0;:2:{:8:ods_id ;我:13;:6:;我:1;} }

解决方案是简单地把序列化($ _cookie { 'cart ' })为序列化(stripslashes($ _cookie { 'cart ' })),在添加和删除Cookie stripslashes,转义字符,所以没问题。

对于cookie的影响,我们再做一次测试:

1。问题:项目数据需要在cookie中序列化,然后得到cookie的数据逆序,获取原始数据,代码如下所示:

将代码复制如下:$ { 0 } =数组();

$ { 1 } =数组();

jsona = json_encode美元(美元);

setcookie(testcookie

setcookie(testcookie

var_dump($ jsona,true); / /正常值

var_dump(json_decode($ _cookie { 'testcookie},true); / /)得到任何价值

当cookie分配未通过时,正常的反序列化是在cookie之后进行的,其值是空的。

2。分析,代码如下:

将代码复制如下:$ { 0 } =数组();

$ { 1 } =数组();

jsona = json_encode美元(美元);

var_dump($ jsona); / /串(50){ {关键: u54c8 u903b},{关键: u54c8 u903b} }

setcookie(testcookie

setcookie(testcookie

var_dump($ _cookie { 'testcookie}); / /串(62){ { 关键 u54c8: u903b },{关键: u54c8 u903b } }

var_dump(json_decode($ _cookie { 'testcookie},真的));

与几种处理后的cookie处理的数据相比,代码如下所示:

复制代码代码如下:var_dump(json_decode(stripslashes($ _cookie { 'testcookie}),真的));

var_dump(json_decode(str_replace(

三.摘要:magic_quotes_gpc会影响所获得的数据得到|后|曲奇饼的时候它是开放的。所以当我们处理数据后得到| |饼干,我们首先判断magic_quotes_gpc开幕。

(1)在打开的情况下,数据的处理需要stripslashes

在开放的情况下,接收数据的第一stripslashes addslashes,处理数据

希望本文能对大家的PHP程序设计有所帮助。