53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
// utils/cookie.ts
|
||
|
||
/**
|
||
* 获取指定名称的 Cookie 值
|
||
*/
|
||
export function getCookie(name: string): string | null {
|
||
const value = `; ${document.cookie}`;
|
||
const parts = value.split(`; ${name}=`);
|
||
if (parts.length === 2) {
|
||
const raw = parts.pop()?.split(';').shift();
|
||
return raw ? decodeURIComponent(raw) : null;
|
||
}
|
||
return null;
|
||
}
|
||
|
||
/**
|
||
* 设置 Cookie
|
||
* @param name 名称
|
||
* @param value 值
|
||
* @param days 有效期(天),不传则为会话 Cookie
|
||
*/
|
||
export function setCookie(name: string, value: string, days?: number): void {
|
||
let expires = '';
|
||
if (days) {
|
||
const date = new Date();
|
||
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
|
||
expires = `; expires=${date.toUTCString()}`;
|
||
}
|
||
// 注意:为了安全,实际项目中可根据需要加上 Secure / SameSite 等属性
|
||
document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=/`;
|
||
}
|
||
|
||
/**
|
||
* 删除 Cookie
|
||
*/
|
||
export function deleteCookie(name: string): void {
|
||
document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
|
||
}
|
||
|
||
/**
|
||
* 调试:打印所有可读 Cookie(非 HttpOnly)
|
||
*/
|
||
export function logAllCookies(): void {
|
||
if (!document.cookie) return;
|
||
const cookies = document.cookie.split('; ').reduce((acc, item) => {
|
||
const eqIndex = item.indexOf('=');
|
||
const key = item.slice(0, eqIndex);
|
||
const value = item.slice(eqIndex + 1);
|
||
acc[key] = decodeURIComponent(value);
|
||
return acc;
|
||
}, {} as Record<string, string>);
|
||
console.table(cookies);
|
||
} |