gpt4 book ai didi

javascript - 将 cookie 存储为 json 但格式错误

转载 作者:行者123 更新时间:2023-11-30 15:02:21 26 4
gpt4 key购买 nike

我的 cookie 有问题,我无法弄清楚问题出在哪里。

这是我的例子test.php

$defaultActions = array(
'1' => '0',
'2' => '0',
'3' => '0',
'4' => '0',
'5' => '0',
'6' => '0',
'7' => '0',
'8' => '0',
'9' => '0',
'10' => '0'
);
$json_str = json_encode($defaultActions);
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) {
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, '/');
}
}

setcookie("test", urldecode ($json_str), false,"/",false);

?>

<script type="text/javascript">
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2)
return parts.pop().split(";").shift();
}

console.log(getCookie('test'));

</script>

问题是cookie会这样存储:

%7B%221%22%3A%220%22%2C%222%22%3A%220%22%2C%223%22%3A%220%22%2C%224%22%3A%220%22%2C%225%22%3A%220%22%2C%226%22%3A%220%22%2C%227%22%3A%220%22%2C%228%22%3A%220%22%2C%229%22%3A%220%22%2C%2210%22%3A%220%22%7D

PHP 中的字符串是正确的。但是当我将它存储在cookie中时,格式已经像上面的例子一样改变了。所以我无法正确读取 JavaScript 中的 cookie。

有人有什么建议吗?

解决方案

<?php

$defaultActions = array(
'1' => '0',
'2' => '0',
'3' => '0',
'4' => '0',
'5' => '0',
'6' => '0',
'7' => '0',
'8' => '0',
'9' => '0',
'10' => '0'
);
$json_str = json_encode($defaultActions);

//delete all cookies
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) {
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, '/');
}
}
//setrawcookie("test", $json_str, false,"/",false);

setcookie("test", $json_str, false,"/",false);

?>

<script type="text/javascript">

function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2)
return parts.pop().split(";").shift();
}

console.log(decodeURIComponent(getCookie('test')));

</script>

感谢@Alex Blex

最佳答案

setcookie自动 urlencode它的值(value)。使用 urldecode添加到参数不会有帮助,因为它对 json 字符串没有任何作用。

相反,您需要使用 setrawcookie .它会按原样发送字符串,因此您可能需要格外小心发送的内容。

更新:

为简单起见,建议对 cookie 进行编码,并在 javascript 中对其进行解码:

console.log(decodeURIComponent(getCookie('test')));

关于javascript - 将 cookie 存储为 json 但格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46318113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com