乐闻世界logo
搜索文章和话题

How do I set cookie expiration time in user local time?

1 个月前提问
1 个月前修改
浏览次数11

1个答案

1

在设置cookie过期时间时,考虑用户的本地时间是非常重要的,因为这关系到用户体验和cookie的有效管理。通常,cookie的过期时间是通过设置Expires属性或者Max-Age属性来定义的。由于HTTP headers和JavaScript中设置cookie的标准时间都是使用GMT(格林尼治标准时间)或者UTC(协调世界时间),因此我们需要将用户的本地时间转换为GMT或UTC时间来设置。

1. 获取用户的本地时间偏移量

首先,我们需要计算出用户本地时间与UTC时间之间的偏差。在JavaScript中,我们可以使用Date对象的getTimezoneOffset()方法来获取这个偏移量。这个方法返回的是本地时间与UTC时间之间的差值,以分钟为单位。

例如,如果用户在东京(UTC+9),getTimezoneOffset()将返回 -540(因为东京比UTC时间早9小时,所以是负值)。

2. 转换时间

假设我们想要设置cookie在用户本地时间的晚上8点过期。我们可以首先创建一个Date对象,设置为用户当天的晚上8点,然后根据偏移量调整这个时间到UTC时间。

javascript
let localExpireHour = 20; // 用户本地时间晚上8点 let now = new Date(); now.setHours(localExpireHour, 0, 0, 0); // 设置今天的晚上8点 // 获取偏移量,并转换为毫秒 let offset = now.getTimezoneOffset() * 60 * 1000; // 转换为UTC时间 let utcExpireTime = new Date(now.getTime() - offset); // 设置cookie document.cookie = `username=John Doe; expires=${utcExpireTime.toUTCString()}; path=/`;

3. 使用Max-Age代替Expires

另一种方法是使用Max-Age属性,它定义了cookie从创建开始存活的秒数。这种方法不需要考虑时间转换,只需知道从现在起多少秒后用户的本地时间将达到晚上8点。

javascript
let localExpireHour = 20; // 用户本地时间晚上8点 let now = new Date(); now.setHours(localExpireHour, 0, 0, 0); let maxAge = (now.getTime() - Date.now()) / 1000; // 转换成秒 document.cookie = `username=John Doe; max-age=${maxAge}; path=/`;

这两种方法都可以根据用户的本地时间设置cookie的过期时间。通常,选择哪一种方法取决于具体需求和偏好。使用Max-Age更为简单和直接,而Expires则在某些老旧的浏览器上支持更好。

2024年8月12日 14:18 回复

你的答案