我一直在尋找我的案例的任何解決方案,但我還沒有找到它。因此我決定分享我的解決方案。跨域cookie - 域間共享數據
CASE
我想分享域之間的一些用戶信息。這意味着我想獲得關於上週已訪問過我的web1.com的用戶的所有收集信息,並立即訪問web2.com。該用戶第一次在web2.com但我已經知道他是誰。
我一直在尋找我的案例的任何解決方案,但我還沒有找到它。因此我決定分享我的解決方案。跨域cookie - 域間共享數據
CASE
我想分享域之間的一些用戶信息。這意味着我想獲得關於上週已訪問過我的web1.com的用戶的所有收集信息,並立即訪問web2.com。該用戶第一次在web2.com但我已經知道他是誰。
SOLUTION:
要求:
PHP服務器http://cookie-server.local的index.php:
<?php
$hash = array_key_exists('my-cookie', $_COOKIE) ? $_COOKIE["my-cookie"] : NULL;
try {
$connection = new PDO("pgsql:dbname=cookie;host=localhost", 'postgres', 'postgres');
$data = findHash($connection, $hash);
if ($data) {
setcookie('my-cookie', $data['hash'], strtotime("+1 year"));
sendResponse($data);
} else {
$hash = generateHash();
$data = storeHash($connection, $hash);
setcookie('my-cookie', $hash, strtotime("+1 year"));
}
} catch (PDOException $e) {
echo $e->getMessage();
die();
}
function findHash($connection, $hash) {
$sql = 'SELECT * from cookie WHERE hash = :hash';
$stm = $connection->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$stm->execute(array(':hash' => $hash));
$result = $stm->fetchAll(PDO::FETCH_ASSOC);
if ($result === FALSE) {
printError($stm->errorInfo());
}
return count($result) > 0 ? $result[0] : NULL;
}
function sendResponse($data) {
header('Content-Type: text/javascript; charset=utf8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
echo 'showData('. json_encode($data) .');';
}
function printError($error) {
echo 'SQL error: ' . $error[2];
die();
}
function generateHash() {
return $hash = md5(uniqid(mt_rand(), TRUE));
}
function storeHash($connection, $hash) {
$sql = "INSERT INTO cookie (id, hash) VALUES (nextval('cookie_id_seq'), :hash)";
$stm = $connection->prepare($sql);
$result = $stm->execute(['hash' => $hash]);
if ($result === FALSE) {
printError($stm->errorInfo());
}
return [
'id' => $connection->lastInsertId(),
'hash' => $hash,
'name' => ''
];
}
?>
基本的網頁上web1.com(JS代碼HAST是無處不在,你需要了解用戶信息)
<html>
<body>
WEB 1:<br> <span id="hash"></span>
</body>
<script type="text/javascript">
function showData(data) {
document.getElementById('hash').innerHTML = "<br>ID: " + data.id + "<br>Hash: " + data.hash + "<br>Jmeno: " + data.name;
}
var script = document.createElement("script");
script.type = 'application/javascript';
script.src = "http://cookie-server.local";
document.getElementsByTagName("head")[0].appendChild(script);
</script>
<script type="text/javascript" src="http://cookie-server.local">
</html>
數據庫:
它是如何工作的?
當用戶訪問web1.com,JS代碼執行,包括 <script type="text/javascript" src="http://cookie-server.local">
頁頭元素。瀏覽器嘗試下載文件的內容,並在服務器上執行PHP代碼。服務器查看通過的Cookie並找出沒有my-cookie。因此,它會生成cookie哈希,並將其存儲在數據庫中,並將其設置爲用戶(Cookie爲cookie-server.local,名稱爲「my-cookie」),併發送用戶數據JSONP。對於服務器的另一個請求,它會查找之前在數據庫中生成的哈希值,並且只會延長到期時間並確保發送用戶數據。從現在開始,當這個用戶用JS代碼打開任何其他網頁(web2.com ...)時,你知道它是誰。