1
我已经在php中编写了一个API,该脚本被一个运行在google标签管理器中的脚本调用。不保留在wordpress中的会话变量
为脚本的使用是一个唯一的电话号码在网站
上加用PHP会话ID cookie来提供每个访问者在测试过程中我所管理的用户跟踪。这让我查询数据库,看看他们是否已经分配了一个号码,如果他们有,那么我需要分配一个号码。
在测试中,这项工作完美无瑕,但是当在wordpress平台中实现cookie时没有设置。因此,每次调用脚本时(在页面更改时),我都会收到一个新号码。
方法1 对客户端设置cookie并且得到使用$ _COOKIE [ '的myCookie']
方法2 创建一个会话,检查会话ID的脚本被称为有史以来时间。会话ID每次都改变......没
方法3 尝试使用GA访问者ID(CID)来跟踪用户,这也产生不同数量的每
我已经尝试了一次一些解决方案来解决这个问题,但目前我不能停止behievour。
脚本目前配置为使用GA CID,看起来像这样
<?php
header("Access-Control-Allow-Origin: *");
error_reporting(-1);
ini_set('display_errors', 'On');
$servername = "";
$username = "";
$password = "";
$dbname = "";
$cookie_name = "TestCookie";
$numID;
$site_id = "";
$domain_name = $_POST['url'];
if(isset($domain_name)) {
$conn_siteID = new mysqli($servername, $username, $password, $dbname);
$sql_siteID = "Select * from SiteList where ReferrerURL = '" . $domain_name . "'";
$result = $conn_siteID->query($sql_siteID);
if ($conn_siteID->connect_error) {
die("Connection failed: " . $conn_siteID->connect_error);
}
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$site_id = $row["id"];
}
} else {
}
$conn_siteID->close();
}
$cid = gaParseCookie();
echo $cid;
if(!empty($cid)) {
//Cookie doesnt exist give them a new number
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "Select * from NumPool where cid='". $cid . "' order by lastshown asc limit 1";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
//return current number
echo $row["number"];
$numID = $row["id"];
$conn4 = new mysqli($servername, $username, $password, $dbname);
$sql = "Update NumPool set lastshown='" . date("Y-m-d H:i:s") . "', cid='". $cid ."' where id='" . $numID . "'";
$result = $conn4->query($sql);
$conn4->close();
}
} else {
//return new number
$conn3 = new mysqli($servername, $username, $password, $dbname);
if ($conn3->connect_error) {
die("Connection failed: " . $conn3->connect_error);
}
$sql = "Select * from NumPool where siteid='". $site_id . "' order by lastshown asc limit 1";
$result = $conn3->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["number"];
$numID = $row["id"];
$conn4 = new mysqli($servername, $username, $password, $dbname);
$sql = "Update NumPool set lastshown='" . date("Y-m-d H:i:s") . "', cid='". $cid ."' where id='" . $numID . "'";
$result = $conn4->query($sql);
$conn4->close();
}
} else {
}
$conn3->close();
}
$conn->close();
}
// Handle the parsing of the _ga cookie or setting it to a unique identifier
function gaParseCookie() {
if (isset($_COOKIE['_ga'])) {
list($version,$domainDepth, $cid1, $cid2) = preg_split('[\.]', $_COOKIE["_ga"],4);
$contents = array('version' => $version, 'domainDepth' => $domainDepth, 'cid' => $cid1.'.'.$cid2);
$cid = $contents['cid'];
}
else $cid = gaGenUUID();
return $cid;
}
// Generate UUID v4 function - needed to generate a CID when one isn't available
function gaGenUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
?>
如果在每次请求的会话ID更改,然后你的会话cookie设置是错误的(丢失会话cookie - >每次获得新的+空会话),或其他地方正在搞乱会话名称/编号 –
你的函数'gaParseCookie()'看起来总是返回一些东西。所以当你用'if(!empty($ cid)){''检查这个值总是返回true。它看起来(从你的评论)你然后给他们一个新的号码。 – Cfreak
感谢您的意见球员,不幸的是既不帮助我解决这个问题。我正在改变策略,并直接在页面上注入脚本,而不是管理服务器端。生病后发布我的解决方案 –