返回
在后台注入 Cookie 的曲折过程
前端
2023-10-14 12:13:21
前言
最近我在做一个小项目,需要在后台注入 Cookie。一开始以为很简单,直接在代码中设置 Cookie 就可以了。然而,当我实际操作时,却遇到了不少问题。经过一番折腾,终于搞定了。现在把这个过程记录下来,分享给大家。
遇到的问题
- 跨域问题
当我在前端请求中不携带 Cookie 时,服务端设置 Cookie:
<?php
setcookie('name', 'value');
这时不会报错,但是 Cookie 却不会被注入。这是因为跨域限制。
解决方法:
- 在服务端设置
Access-Control-Allow-Origin
头部,允许跨域请求。 - 在前端请求中设置
Origin
头部,指定请求的来源。
<?php
header('Access-Control-Allow-Origin: *');
const request = new Request('https://example.com', {
headers: {
'Origin': 'https://example.com',
},
});
- Cookie 名字不能以数字开头
PHP 中,Cookie 名字不能以数字开头。这是因为数字开头会被解析为十进制数字,导致 Cookie 名字不合法。
解决方法:
- 不要使用数字开头的 Cookie 名字。
- 在 Cookie 名字前加一个字母。
<?php
setcookie('1name', 'value');
- Cookie 值不能包含某些特殊字符
Cookie 值不能包含某些特殊字符,如分号、逗号、空格等。这是因为这些字符会被解析为分隔符,导致 Cookie 值不合法。
解决方法:
- 不要使用包含特殊字符的 Cookie 值。
- 对 Cookie 值进行编码。
<?php
setcookie('name', urlencode('value'));
- Cookie 过期时间不能为负数
Cookie 过期时间不能为负数。这是因为负数表示 Cookie 已经过期,会被浏览器忽略。
解决方法:
- 不要使用负数的 Cookie 过期时间。
- 将 Cookie 过期时间设置为 0,表示 Cookie 永不过期。
<?php
setcookie('name', 'value', 0);
- Cookie 大小不能超过 4KB
Cookie 大小不能超过 4KB。这是因为浏览器的限制。
解决方法:
- 不要使用超过 4KB 的 Cookie。
- 将 Cookie 拆分成多个部分。
总结
以上就是我在后台注入 Cookie 时遇到的问题以及解决方法。希望对大家有所帮助。
参考资料