0

私は現在、ユーザーが最初にページにアクセスしたときに、次のコードのチャンクによって設定されたCookieを受信するためにPHP呼び出しを行おうとしています。

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)

呼び出しに7つのパラメーターがあり、構造に正しく従っていませsetcookie()ん。

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 Schoolsにはかなり良い例があり、 PHPマニュアル自体setcookie()は常に存在します

1つの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, "/")

または、;で1つの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'] );

ただし、もう1つ注意すべき点は、SQLインジェクション攻撃を回避するために、データベースから情報を挿入または取得するときに、プリペアドステートメントを実際に使用する必要があるということです。あなたはこれらが何であるかを知っていますか/あなたはそれらを避けるために予防技術を使用していますか?

于 2013-03-25T22:44:34.517 に答える