PHP Cookies and MySQL


PHP Cookies and MySQL

当用户第一次登陆页面

时,我正在尝试进行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

您可能需要查看如何在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, $thisSubID$thisURL变量包含或用于什么?

W3学校有一个很好的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注入攻击。你知道这些是什么吗/你有使用任何预防技巧来避免它们吗?