0

我目前正在尝试进行 PHP 调用以在用户首次登陆页面时接收由以下代码块设置的 cookie

if (empty($_COOKIE["uuid"])) {
$uuid = uniqid();  // or use a real UUID
setcookie("info", $uuid, $thisAid, $thisSubID, $thisURL, time()+30*24*60*60, "/");
}
else {
$uuid = $_COOKIE["uuid"];
foreach($_COOKIE as $name => $uuid){
// you can check any conditions based on cookie name $name
$cookiequery = "INSERT INTO table_name(WebTraffic) VALUES(" . mysql_escape_string($uuid) . ##")";
mysql_query($cookiequery);
unset($cookiequery);

然后在用户点击特定页面以从 cookie 中获取值并将其添加到数据库时向数据库添加另一行

if (isset($_COOKIE["uuid"]))
$values = '';
$sql = "    INSERT INTO WebTraffic (aid, subID, campaignID, URL, uuid) VALUES(";
foreach ($_COOKIE as $name => $uuid)
$values .= "'$uuid'";

$sql .= $values.")";

但两者都没有工作,有人能指出我正确的方向吗?谢谢!

编辑:这些值是前面设置的字符串:

$thisAID = $_GET['aID'];
$thisSubID = $_GET['subID'];
$thisCampaignID = $_GET['campaignID'];
$thisURL = $_SERVER['REQUEST_URI'];
$uuid = uniqid(); 

从传递的 URL 中提取

4

1 回答 1

2

您可能需要查看在 PHP 中正确设置 cookie。该setcookie()函数最多需要 6 个参数,如下所示:

setcookie(name,value,expire,path,domain,secure)

setcookie()在调用中有 7 个参数并且未正确遵循结构:

setcookie("info", $uuid, $thisAid, $thisSubID, $thisURL, time()+30*24*60*60, "/")

此外,您正在使用您的代码检查一个名为“uuid”的空 cookie,empty($_COOKIE["uuid"])但是您正在设置一个名称为 info 的 cookie。

您需要将其重新安排为:

setcookie("uuid", $uuid, time()+30*24*60*60, "/")

但是我不知道$thisAid, $thisSubIDor$thisURL变量包含什么或用于什么?

W3 Schools有一个很好的例子,setcookie()而且总是有PHP 手册本身

如果您想使用一个 cookie 来存储所有变量,然后构建 SQL 查询,那么您可以为每个变量单独设置一个 cookie,如下所示:

setcookie("uuid", $uuid, time()+30*24*60*60, "/")
setcookie("thisAid", $thisAid, time()+30*24*60*60, "/")
setcookie("thisSubID", $thisSubID, time()+30*24*60*60, "/")
setcookie("thisURL", $thisURL, time()+30*24*60*60, "/")
setcookie("campaignID", $thisCampaignID, time()+30*24*60*60, "/")

或者使用 ; 设置一个 cookie 用于分隔每个值的符号,如下所示:

setcookie("uuid", $thisAid . ";" . $thisSubId . ";" . $thisCampaignID. ";" . $thisURL . ";" . $uuid, time()+30*24*60*60, "/")

然后,您可以使用该explode()函数将 cookie 值分开,然后在其上使用 foreach 循环来构建您的 SQL 查询,如下所示:

    $values = explode( ";", $_COOKIE['uuid'] );

    foreach( $values as $value ) {  $sqlValues .= $value . ","; }

    $sql = "INSERT INTO WebTraffic (aid, subID, campaignID, URL, uuid) VALUES($sqlValues);

或者使用上面的多个 setcookie() 调用,您可以这样做:

    $sql = "INSERT INTO WebTraffic (aid, subID, campaignID, URL, uuid) VALUES($_COOKIE['thisAid'], $_COOKIE['subID'], $_COOKIE['campaignID'], $_COOKIE['thisURL'], $_COOKIE['uuid'] );

但是要注意的另一件事是,在从数据库中插入或检索信息时,您确实应该使用准备好的语句,以避免 SQL 注入攻击。你知道这些是什么/你正在使用任何预防技术来避免它们吗?

于 2013-03-25T22:44:34.517 回答