【问题标题】:PHP Cookies and MySQLPHP Cookies 和 MySQL
【发布时间】:2013-03-26 07:30:36
【问题描述】:

我目前正在尝试进行 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 mysql cookies


    【解决方案1】:

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

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

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

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

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

    您需要将其重新安排为:

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

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

    W3 Schools 有一个很好的 setcookie() 示例,并且总是有 PHP Manual 本身

    如果您想使用一个 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 注入攻击。你知道这些是什么吗/你正在使用任何预防技术来避免它们吗?

    【讨论】:

    • 如果我在 setcookie("info"...) 后跟 7 个参数中的 6 个参数会更好吗?
    • 您正在检查名称为“uuid”的 cookie,但设置了名称为“info”的 cookie,因此您还需要将 cookie 命名为“uuid”。你可以通过设置 setcookie('uuid', $uuid, time() +30*24*60*60) 来做。那会自己工作。其他变量($thisAid、$thisSubID、$thisURL)中还包含什么以及它们的用途是什么?
    • 我正在跟踪 URL 以使用 cookie 进行分析,我在原始问题中更好地解释了变量
    • 那么您需要为每个变量($thisAid、$thisSubID、$thisURL)设置单独的 cookie 还是将所有值保存在一个 cookie 中?
    • 都在一个 cookie 中,它们都在一个 URL example.com/?aid=xxx&subid=xxx&campaignid=xxx 我希望它提取该字符串的值并将其存储在一个 cookie 中,目前我有代码可以做到这一点之前的PHP但没有把它保存在cookie中
    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2015-01-27
    • 2012-07-03
    相关资源
    最近更新 更多