# @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 下载量 159 浏览量
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
- 粉丝: 1483
- 资源: 6848
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 小米长条音响app,支持手机控制长条音响和低音炮
- IMG_20240917_194445.jpg
- Java项目-基于SSM+Jsp的校园快递一站式服务系统的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
- docker基础概念的简化理解
- Java项目-基于SSM+Jsp的学生信息管理系统的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
- mamba相关torch环境
- Java项目-基于SSM+Jsp的彩妆小样售卖商城的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
- Win7 32位程序反编译工具(Ollyice、PEid v0.95、DeDeDark、Winhex v20.8、案例)
- Java项目-基于SSM+Jsp的软件科技有限公司信息管理系统的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
- Java项目-基于SSM+Vue的校园代购服务订单管理系统的设计与实现(源码+数据库脚本+部署视频+代码讲解视频+全套软件)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功