JS 会话时间管理类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/**
* 会话时间管理类
*/
class SessionTimeManager {
/**
* 设置会话时间
* @param {string} key - 存储键名
* @param {number} duration - 持续时间(毫秒)
*/
static setSessionTime(key, duration) {
if (!key) throw new Error('键名不能为空');
const expiryTime = Date.now() + duration;
sessionStorage.setItem(key, expiryTime.toString());
}

/**
* 检查并更新会话时间
* @param {string} key - 存储键名
* @param {number} duration - 持续时间(毫秒),默认为24小时
* @returns {boolean|string} - 返回true表示更新成功,'OneTime'表示首次设置,false表示未过期
*/
static checkAndUpdateSession(key, duration = 86400000) {
if (!key) throw new Error('键名不能为空');

const storedTime = sessionStorage.getItem(key);
const currentTime = Date.now();

// 如果没有存储时间,设置并返回'OneTime'
if (!storedTime) {
this.setSessionTime(key, duration);
return 'OneTime';
}

// 检查是否过期
if (currentTime >= parseInt(storedTime)) {
this.setSessionTime(key, duration);
return true;
}

return false;
}

/**
* 获取剩余时间
* @param {string} key - 存储键名
* @returns {number} - 剩余时间(毫秒),如果key不存在返回0
*/
static getRemainingTime(key) {
const storedTime = sessionStorage.getItem(key);
if (!storedTime) return 0;

const remaining = parseInt(storedTime) - Date.now();
return remaining > 0 ? remaining : 0;
}
}

// 使用示例
const SESSION_KEY = 'sessionTimeKey'; // 统一使用一个键名
const SESSION_DURATION = 5000; // 5秒的会话时间

const flag = SessionTimeManager.checkAndUpdateSession(SESSION_KEY, SESSION_DURATION);
setTimeout(() => {
console.log(flag, '-----flag');
if (flag === true) {
// 会话已更新,可以执行相关操作
console.log('会话已更新');
}
if (flag === 'OneTime') {
// 首次设置会话
console.log('首次设置会话');
}
if (flag === false) {
// 会话未过期
console.log('会话未过期,剩余时间:', SessionTimeManager.getRemainingTime(SESSION_KEY), 'ms');
}
}, 1000);