首页 > 解决方案 > Javascript 将 cookie 值添加为对象,与添加它的 PHP 不同

问题描述

这是我的代码:

<?php
    $cookie = [
            'url' => (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null),
            'landing_page' => "//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}",
            'date' => date('Y-m-d H:i:s')
        ];

        setcookie("mycookie_".rand(1,1000), json_encode($cookie), time() + (86400 * 30), "/");

?>
<script>    
var random = Math.floor((Math.random() * 1000) + 1);

setcookie("first_interaction"+random,<?=json_encode($cookie)?>,365)
</script>

问题是如何将“json_encode($cookie)”的值添加为 cookie 值,见下文:

在 Javascript 中添加 cookie 时的值:

 [object Object]

在 PHP 中添加 cookie 时的值:

%7B%22url%22%3Anull%2C%22landing_page%22%3A%22%5C%2F%5C%2Fwww.site.com%5C%2FcookieTest.php%3Ftest%3Dtest%22%2C%22date%22%3A%222018-07-05+17%3A33%3A34%22%7D

我希望 JS 添加与 PHP 相同的 cookie 值……有什么想法吗?

标签: javascriptphpcookies

解决方案


setcookie("first_interaction"+random,<?=json_encode($cookie)?>,365)

这里的问题是您将原始 json 放入该方法调用中。当浏览器解析 javascript 时,它将把它变成一个真实的对象,这很可能是您看到[object Object].

我建议在值周围加上单引号,以便 javascript 将其保留为字符串。

setcookie("first_interaction"+random,'<?=json_encode($cookie)?>',365)

推荐阅读