# @alicloud/cookie
yet... another 饼干的获取和操作工具
## INSTALL
```shell
tnpm i @alicloud/cookie -S
```
## APIs
## getAllCookies
获取当前页面可以访问到的全部 cookie。
```typescript
function getAllCookies(): object;
```
## getCookie
获取单个 cookie
```typescript
function getCookie(name: string): string | undefined;
```
## setCookie
设置 cookie,设置 cookie,默认为时间为 180 天,设置 extra.days 为 0 可以保存为 session cookie(expires 为空)
```typescript
function setCookie(name: string, value: string, extra: {
domain?: string; // 默认为当前页面的二级域名,如 `.aliyun.com`,如果是 IP 则为 IP,如 `127.0.0.1`
path?: string; // 默认 '/'
days?: number; // 默认 180,传入 `days: 0` 成为 session cookie
encoding?: boolean; // 默认 true,传入 `false` 可保存原始的值(比如 value 已经经过 base64 编码过)
} = {}): void;
```
## deleteCookie
删除 cookie,其实设置一个过期时间为此刻之前的时间,浏览器会自动清理过期的 cookie
```typescript
function deleteCookie(name: string, extra: {
domain?: string;
path?: string;
} = {}): void;
```
## SameSite + Secure 以及 HTTPS 和 Iframe 的影响
以下条件下:
* 协议
+ `http://`
+ `https://`
* iframe
+ 无
+ 不跨域
+ 跨子域
+ 跨全域
SameSite 和 Secure 各值:
* SameSite
+ undefined
+ Lax
+ Strict
+ None
* Secure
+ true
+ false
在各个浏览器:
* 浏览器
+ Firefox
+ Chrome
+ Safari
下对 set cookie 的影响。
### 测试脚本
注意,在 Iframe 下,需通过浏览器的 Console 切换到对应的 Iframe 上下文。
```javascript
(() => {
function setCookie(name, value, {
path = '/',
sameSite,
secure
} = {}) {
const parts = [
`${name}=${encodeURIComponent(value)}`,
// `domain=${domain}`,
`path=${path}`
];
if (sameSite !== undefined) {
parts.push(`sameSite=${sameSite}`);
}
if (secure !== undefined) {
parts.push(`secure=${secure}`);
}
document.cookie = parts.join('; ');
}
function getCookie(name) {
return document.cookie.split(/\s*;\s*/).reduce((result, v) => {
const [cookieName, cookieValue] = v.split('=');
try {
result[cookieName] = decodeURIComponent(cookieValue);
} catch (err) {
}
return result;
}, {})[name];
}
const TIME = Date.now();
const ITEMS = [undefined, 'Lax', 'Strict', 'None'].reduce((result, sameSite) => {
[undefined, true, false].forEach(secure => {
const name = `TEST_SameSite_${sameSite}__Secure_${secure}`;
const value = `${sameSite}_${secure}_${TIME}`;
setCookie(name, value, {
sameSite,
secure
});
const valueGet = getCookie(name);
result.push({
name,
value,
valueGet,
sameSite,
secure,
result: valueGet === value ? '✅' : '❌'
});
});
return result;
}, []);
console.table(ITEMS, ['sameSite', 'secure', 'result']);
})();
```
### HTTP 非 Iframe
| SameSite | Secure | Firefox | Chrome | Safari |
|--------------|-------------|---------|--------|--------|
| `undefined` | `undefined` | ✅ | ✅ | ✅ |
| `undefined` | `true` | ❌ | ❌ | ❌ |
| `undefined` | `false` | ❌ | ❌ | ❌ |
| Lax | `undefined` | ✅ | ✅ | ✅ |
| Lax | `true` | ❌ | ❌ | ❌ |
| Lax | `false` | ❌ | ❌ | ❌ |
| Strict | `undefined` | ✅ | ✅ | ✅ |
| Strict | `true` | ❌ | ❌ | ❌ |
| Strict | `false` | ❌ | ❌ | ❌ |
| None | `undefined` | ❌ | ❌ | ✅ |
| None | `true` | ❌ | ❌ | ❌ |
| None | `false` | ❌ | ❌ | ❌ |
### HTTP Iframe 不跨域
| SameSite | Secure | Firefox | Chrome | Safari |
|--------------|-------------|---------|--------|--------|
| `undefined` | `undefined` | ✅ | ✅ | ✅ |
| `undefined` | `true` | ❌ | ❌ | ❌ |
| `undefined` | `false` | ❌ | ❌ | ❌ |
| Lax | `undefined` | ✅ | ✅ | ✅ |
| Lax | `true` | ❌ | ❌ | ❌ |
| Lax | `false` | ❌ | ❌ | ❌ |
| Strict | `undefined` | ✅ | ✅ | ✅ |
| Strict | `true` | ❌ | ❌ | ❌ |
| Strict | `false` | ❌ | ❌ | ❌ |
| None | `undefined` | ❌ | ❌ | ✅ |
| None | `true` | ❌ | ❌ | ❌ |
| None | `false` | ❌ | ❌ | ❌ |
### HTTP(Iframe 跨子域)
| SameSite | Secure | Firefox | Chrome | Safari |
|--------------|-------------|---------|--------|--------|
| `undefined` | `undefined` | ✅ | ✅ | ✅ |
| `undefined` | `true` | ❌ | ❌ | ❌ |
| `undefined` | `false` | ❌ | ❌ | ❌ |
| Lax | `undefined` | ✅ | ✅ | ✅ |
| Lax | `true` | ❌ | ❌ | ❌ |
| Lax | `false` | ❌ | ❌ | ❌ |
| Strict | `undefined` | ✅ | ✅ | ✅ |
| Strict | `true` | ❌ | ❌ | ❌ |
| Strict | `false` | ❌ | ❌ | ❌ |
| None | `undefined` | ❌ | ❌ | ✅ |
| None | `true` | ❌ | ❌ | ❌ |
| None | `false` | ❌ | ❌ | ❌ |
### HTTP(Iframe 跨全域)
| SameSite | Secure | Firefox | Chrome | Safari |
|--------------|-------------|---------|--------|--------|
| `undefined` | `undefined` | ❌ | ❌ | ❌ |
| `undefined` | `true` | ❌ | ❌ | ❌ |
| `undefined` | `false` | ❌ | ❌ | ❌ |
| Lax | `undefined` | ❌ | ❌ | ❌ |
| Lax | `true` | ❌ | ❌ | ❌ |
| Lax | `false` | ❌ | ❌ | ❌ |
| Strict | `undefined` | ❌ | ❌ | ❌ |
| Strict | `true` | ❌ | ❌ | ❌ |
| Strict | `false` | ❌ | ❌ | ❌ |
| None | `undefined` | ❌ | ❌ | ❌ |
| None | `true` | ❌ | ❌ | ❌ |
| None | `false` | ❌ | ❌ | ❌ |
### HTTPS 非 Iframe
| SameSite | Secure | Firefox | Chrome | Safari |
|--------------|-------------|---------|--------|--------|
| `undefined` | `undefined` | ✅ | ✅ | ✅ |
| `undefined` | `true` | ✅ | ✅ | ✅ |
| `undefined` | `false` | ✅ | ✅ | ✅ |
| Lax | `undefined` | ✅ | ✅ | ✅ |
| Lax | `true` | ✅ | ✅ | ✅ |
| Lax | `false` | ✅ | ✅ | ✅ |
| Strict | `undefined` | ✅ | ✅ | ✅ |
| Strict | `true` | ✅ | ✅ | ✅ |
| Strict | `false` | ✅ | ✅ | ✅ |
| None | `undefined` | ❌ | ❌ | ✅ |
| None | `true` | ✅ | ✅ | ✅ |
| None | `false` | ✅ | ✅ | ✅ |
### HTTPS 在 Iframe 下(不跨域)
`a.com` 页面通过 Iframe 内嵌 `a.com` 页面,在内层 `a.com` 页面上进行测试。
| SameSite | Secure | Firefox | Chrome | Safari |
|---------
没有合适的资源?快使用搜索试试~ 我知道了~
AlibabaCloud-ConsoleBase-阿里云控制台基座-alibabacloud-console-base
共2000个文件
ts:884个
json:392个
tsx:369个
需积分: 5 0 下载量 200 浏览量
2024-09-03
10:30:11
上传
评论
收藏 2.8MB ZIP 举报
温馨提示
linuxAlibabaCloud_ConsoleBase_-_阿里云控制台基座_alibabacloud-console-base.zip AlibabaCloud_ConsoleBase_-_阿里云控制台基座_alibabacloud-console-base.zip AlibabaCloud_ConsoleBase_-_阿里云控制台基座_alibabacloud-console-base.zip AlibabaCloud_ConsoleBase_-_阿里云控制台基座_alibabacloud-console-base.zip AlibabaCloud_ConsoleBase_-_阿里云控制台基座_alibabacloud-console-base.zip
资源推荐
资源详情
资源评论
收起资源包目录
AlibabaCloud-ConsoleBase-阿里云控制台基座-alibabacloud-console-base (2000个子文件)
commit-msg 73B
.commitlintrc 61B
.eslintrc 47B
index.js 7KB
ts.js 5KB
es.js 4KB
react.js 1KB
import.js 1KB
ts.js 788B
react.js 690B
es6.js 626B
tsx.js 564B
import.js 495B
react.js 444B
es6.js 328B
es5.js 326B
sc.js 279B
ts.js 243B
es6-only.js 231B
lodash.js 154B
lodash.js 139B
es5-only.js 128B
tsx.js 116B
jsx-a11y.js 105B
es5.js 78B
vue.js 67B
rax.js 67B
tsx.js 55B
index.js 35B
package.json 3KB
package.json 3KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
package.json 2KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
好家伙VCC
- 粉丝: 2045
- 资源: 9145
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功