我已经做了一个测试页面来测试使用 AJAX 和 PHP 设置的 cookie。当我们使用 GET 加载页面时,PHP 会设置一个 cookie
__test__=caca
然后一旦文档准备就绪,cookie 就会从前端删除,然后对自身执行 POST 并且 PHP 会为 cookie 设置一个新值 pipi
.
所有这些作品。
问题是,如果我将这个页面移动到一个文件夹中,比如 /test 并将 POST url 更改为
/test
,那么 cookie 不会从 POST 更新,尽管 cookie 被设置为 path=/.
如何解决这个问题?
<?php
switch($_SERVER['REQUEST_METHOD']){
case 'GET':
setcookie('__test__', 'caca', time() + 30 * 10000, '/');
break;
case 'POST':
header("Set-Cookie: __test__=pipi; ".(time() + 30 * 10000)."; path=/;");
header('Content-type: application/json');
echo '{"success": true}';
die();
break;
}
?>
<script type="application/javascript">
$(document).ready(() => {
console.log('ON LOAD', document.cookie.match('(^|[^;]+)\\s*__test__\\s*=\\s*([^;]+)').pop());
document.cookie = '__test__=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;';
setTimeout(() => {
console.log('AFTER DELETE', document.cookie.match('(^|[^;]+)\\s*__test__\\s*=\\s*([^;]+)'));
$.ajax({
method:'POST',
url:'/',
data:JSON.stringify('{}'),
async:true,
processData:false,
contentType:'application/json',
success:function(__data, __textStatus, __jqXHR){
console.log('AFTER POST', document.cookie.match('(^|[^;]+)\\s*__test__\\s*=\\s*([^;]+)').pop());
}
});
}, 2000);
});
</script>