Javascript 通过小部件设置第三方cookie,以便我以后可以识别用户
我正在尝试从用户添加到其网站的小部件设置第三方cookie。小部件位于user-site.com上,托管代码为o admin-site.com。我的目标是为它们设置一个cookie,以便小部件能够在安装小部件的任何网站上识别它们。我不想使用弹出窗口,让他们通过我的网站登录。我只想通过小部件为它们设置一个cookie,然后能够识别它们Javascript 通过小部件设置第三方cookie,以便我以后可以识别用户,javascript,jquery,cookies,widget,jsonp,Javascript,Jquery,Cookies,Widget,Jsonp,我正在尝试从用户添加到其网站的小部件设置第三方cookie。小部件位于user-site.com上,托管代码为o admin-site.com。我的目标是为它们设置一个cookie,以便小部件能够在安装小部件的任何网站上识别它们。我不想使用弹出窗口,让他们通过我的网站登录。我只想通过小部件为它们设置一个cookie,然后能够识别它们 需要2行代码来显示小部件;1.js文件和1行html 将小部件添加到user-site.com后,将显示两个文本字段;1表示您的姓名,1表示您的电子邮件。然后单
- 需要2行代码来显示小部件;1.js文件和1行html
cookie1
的值。我尝试使用以下方法获取cookie值:
alert(document.cookie.indexOf("cookie1")); // This doesn't return the same value I set the cookie to from the HTTP header
但是,这不会返回与我在HTTP头中设置cookie相同的值。如何在widget.js中调用相同的值?JavaScript始终在嵌入它的HTML文档的上下文中运行,因此您无法使用JavaScript设置第三方cookie
在JSONP响应上使用HTTP头设置cookie(请记住,许多浏览器配置为完全阻止第三方cookie)。从
widget\u update.php
设置cookie
您应该设置“安全”属性(假设admin-site.com通过HTTPS提供),以防止最终用户使用公共WiFi时有人窃取该信息
您还需要将SameSite属性设置为“None”。现代浏览器正试图提高互联网安全性并防止数据泄漏,因此,如果您没有明确表示“samesite=none”的第三方网站允许使用cookie,cookie可能会被阻止。您无法在GET请求上设置内容类型,没有内容可描述cookie的类型。我更新了代码并删除了该代码。有没有一种方法可以成功地用更新后的代码设置cookie?能否提供一个在widget.js中工作的简短代码示例?谢谢你,昆汀。
`啊,是的,我已经试过了,现在又重新实现了。我用代码示例更新了我的问题,解释了为什么我对这个问题有异议。当我试图在widget.js中调用cookie1
时,我无法获取它的值。你能看一下让我知道为什么我的代码不起作用吗?谢谢你!正如我所说的-Javascript只能访问代码运行所在页面的cookies。它无法读取或写入第三方cookie。如果您希望cookie数据可供JS使用,则必须从服务器端代码中输出它。但是,从widget.JS,我会将cookie值存储在哪种类型的变量中,我知道它是从嵌入该小部件的任何网站设置的?(即使重新加载页面等)
// Create the input fields and submit button
var login_name = '<input type="text" name="name" />';
var login_email = '<input type="email" name="email" />';
var login_button = '<input type="button" value="Login" />';
var add_fields_to_html_snippet = login_name + login_email + login_button;
$('#widget-container').html(add_fields_to_html_snippet);
$.ajax({
url : "http://example.com/widget_update.php",
type: "GET",
data: { name:name, email:email },
dataType:"jsonp",
jsonp:"mycallbackupdate",
success:function(data) { // The server side sends back the users id which will become the value of the 3rd party cookie
// This is the value *user_id returned from server side
var value = data.user_id;
// I'm trying to set a cookie but it doesn't work
document.cookie = 'cookie1=' + user_id + '; expires=Fri, 3 Aug 2016 20:47:11 UTC; path=/'
}
});
$_COOKIE['user_id'] = $user_id;
$expire = time() + 60 * 60 * 24 * 365;
setcookie('cookie1', $_COOKIE['user_id'], $expire);
alert(document.cookie.indexOf("cookie1")); // This doesn't return the same value I set the cookie to from the HTTP header