通过小部件设置第三方cookie,以便我以后可以识别用户

时间:2016-01-03 16:12:13

标签: javascript jquery cookies widget jsonp

我尝试从用户添加到其网站的小部件中设置第三方Cookie。该小部件位于user-site.com上,托管代码为admin-site.com。我的目标是为他们设置一个cookie,这样小部件就可以在安装小部件的任何网站上识别它们。我不想使用弹出窗口让他们通过我的网站登录。我只是想为他们设置一个cookie,通过它可以识别它们。

  • 需要2行代码才能显示小部件; 1 .js文件和1行html。

将小部件添加到user-site.com后,会出现两个文本字段; 1表示您的姓名,1表示您的电子邮件。然后单击按钮进行提交。然后,我为用户返回user_id,并尝试通过窗口小部件设置cookie。这不起作用......

user-site.com需要在其html中添加2行代码才能显示小部件

<script src="http://example.com/widget.js" type="text/javascript" async="true"></script>
<div id="widget-container" class="8AORPIY0"></div>

widget.js

// 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中调用相同的值?

2 个答案:

答案 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。