在首次页面加载之前设置时区 Cookie

Set timezone cookie BEFORE first page load

本文关键字:设置 时区 Cookie 加载      更新时间:2023-09-26

在我的 ASP.NET 网站上,我有很多带有时间戳的页面。我想将时间戳从服务器时间即时转换为浏览器时间。为此,我需要在代码隐藏中获取客户端的时区偏移量。

我尝试的是使用 JavaScript 在每个页面的<head>中设置TimezoneOffset cookie。但是当第一次加载页面时,它(显然)不起作用(并且之前没有设置cookie)。

是否有任何优雅的解决方案可以将日期从服务器时间转换为客户端时间?

我看到的唯一解决方案是检查Page_Load中的TimezoneOffset cookie,然后重定向到将设置此cookie的虚拟页面,然后使用JS重定向回原始页面,但我不喜欢这个解决方案。

我认为您无法在用户进入页面之前访问任何用户的信息,但您可以在头脑中检查cookie并重新加载页面。这看起来像这样:

var time = getCookie("timezoneoffset");
if(time !== undefined) {
    //congrats, the timezone is set!
} else {
    //set the cookie here, then do this:   
    location.reload()
}

您可以通过在设置 cookie 后进行刷新来使用 Wyatt 的解决方案(当然,您必须忽略真正的第一个请求,因为它没有 cookie)

var time = getCookie("timezoneoffset");
if(time != undefined) {
    //congrats, the timezone is set!
} else {
    //set the cookie here, then do this ....
    location.reload();
}

您是否考虑过进行此转换客户端?这可能是一个更好的解决方案(但在很大程度上取决于您的应用程序体系结构)。

同样通过这种方式,您将潜在客户限制为接受cookie的客户(但那是另一回事)。