【发布时间】:2012-12-05 09:25:08
【问题描述】:
我希望人们注册我的网站并为他们提供一个独特的 javascript sn-p,他们必须将其放在他们的网站上。 我有 2 个问题。
1) 假设我使用下面的代码来跟踪他们网站上的访问持续时间。下面的跟踪跟踪一个人何时访问该站点并离开它,但我如何确保他们真正离开该站点而不仅仅是访问该站点域上的另一个页面(意味着用户仍在他们的站点上)。饼干?
var timeLog = {
start: null,
end: null,
init: function(){
this.start = new Date().getTime();
},
sendResults: function(){
this.end = new Date().getTime();
var jData = { "client": "some-access-string", "start": this.start, "end": this.end };
var client = new XMLHttpRequest();
client.open("POST", "http://yoursite.com/process_info.php");
client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
client.send(JSON.stringify(jData));
}
};
window.onbeforeunload = function() {
timeLog.sendResults();
};
timeLog.init();
2) 我还没有完成跨站点脚本,所以我想知道如果 javascript sn-p 调用 process_info.php 脚本,我是否可以尝试设置 cookie 并获取 $_SERVER 变量,例如 $_SERVER['HTTP_USER_AGENT ']。由于实际的 php 脚本将位于不同的域上,这会起作用吗?
【问题讨论】:
-
这看起来很棘手,由于安全问题,我怀疑你是否能 100% 工作。对于突然关闭浏览器或禁用 javascript 的人,你会怎么做?我不认为设置 cookie 会起作用,因为大多数浏览器可以在不阻止“正常”cookie 的情况下阻止 3rd 方 cookie。
-
如果他们关闭浏览器,我认为它仍然是 onbeforeunload。如果他们很好地禁用了 javascript,那么您对此无能为力。我不确定是否有任何其他方法可以实现此功能。
-
我修改了你的代码,当我使用 navigator.sendBeacon 提交请求时,我获得了一个在许多流行浏览器(chrome、firefox、edge、Midori、chromium、brave ,顿悟,歌剧,qutebrowser,也许还有其他一些未经测试的)。
标签: php javascript cookies cross-domain tracking