我尝试从用户添加到其网站的小部件中设置第三方Cookie。该小部件位于user-site.com上,托管代码为admin-site.com。我的目标是为他们设置一个cookie,这样小部件就可以在安装小部件的任何网站上识别它们。我不想使用弹出窗口让他们通过我的网站登录。我只是想为他们设置一个cookie,通过它可以识别它们。
将小部件添加到user-site.com后,会出现两个文本字段; 1表示您的姓名,1表示您的电子邮件。然后单击按钮进行提交。然后,我为用户返回user_id,并尝试通过窗口小部件设置cookie。这不起作用......
<script src="http://example.com/widget.js" type="text/javascript" async="true"></script>
<div id="widget-container" class="8AORPIY0"></div>
// 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?我希望能够识别来自使用此小部件的任何站点的用户。
我也尝试过从服务器端设置cookie:
$_COOKIE['user_id'] = $user_id;
$expire = time() + 60 * 60 * 24 * 365;
setcookie('cookie1', $_COOKIE['user_id'], $expire);
但是,我无法从widget.js获取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中调用相同的值?
答案 0 :(得分:1)
JavaScript总是在嵌入的HTML文档的上下文中运行,因此您无法使用JavaScript设置第三方cookie。
使用JSONP响应上的HTTP标头设置cookie(请记住,许多浏览器都配置为完全阻止第三方cookie)。
答案 1 :(得分:0)
从 widget_update.php
设置 cookie。
您应该设置“安全”属性(假设 admin-site.com 通过 HTTPS 提供服务)以防止人们在最终用户使用公共 WiFi 时窃取该信息。
您还需要将 SameSite 属性设置为“无”。现代浏览器正在努力提高互联网安全性并防止数据泄露,因此,如果您没有明确说明在“samesite=none”的第三方网站上允许使用 cookie,则可能会阻止 cookie。