【问题标题】:How to reload a page without deleting the cookie如何在不删除 cookie 的情况下重新加载页面
【发布时间】:2023-08-12 09:07:01
【问题描述】:

我正在做一个网络应用程序,并且我已经在用户可以选择更改应用程序语言的部分,例如。从 en-US 到 ja,我使用的是 i18next。我所做的是将用户的首选语言写入 cookie,重新加载页面,然后读取我使用用户首选语言创建的 cookie。但是它不起作用,因为似乎每次重新加载页面时,我创建的 cookie 都会被删除,因此它会恢复为默认语言。

问题有没有办法在不删除我制作的 cookie 的情况下重新加载页面?

【问题讨论】:

  • 您可能正在某处删除/清空 cookie 或未正确调用它...请发布您尝试过的代码...
  • 您是否设置了到期日?您能否在 resources 选项卡中检查浏览器的开发人员工具,并确定您的 cookie 的到期日期是否设置为 session 而不是将来的正确日期。
  • @Jorg 是的,它设置为会话。为什么?这有什么问题?
  • 问题是会话在重新加载/关闭浏览器后过期。如果您希望 cookie 持续存在,则必须在其上设置日期。看我的回答。

标签: javascript cookies internationalization i18next


【解决方案1】:

尝试在 cookie 上设置过期日期。下面的代码将其设置为未来一年。

a = new Date(new Date().getTime() +1000*60*60*24*365);
document.cookie = 'mycookie=somevalue; expires='+a.toGMTString()+';'; 

请试一试,然后再次检查resources 标签,看看它是否已更改。

Here 是一些关于 cookie 语法和选项的信息。

【讨论】:

  • 这行得通!但是我是否需要担心 cookie 会在客户端计算机中保留一年?
  • 为什么会引起关注?这意味着除非他们删除他们的 cookie,否则您将能够阅读他们的语言偏好。
  • 留意像这样的大型网站上的资源标签。 SO 设置多个 cookie 的有效日期很长
【解决方案2】:

这可能会在开发期间发生,一旦您部署了应用程序,它可能不会发生。

请将应用程序部署到本地 IIS 并测试它是否会遇到同样的问题。

还希望您添加 cookie 的到期时间。它类似于下面的东西

HttpCookie aCookie = new HttpCookie("SiteLanguage");
aCookie.Value = "en-US";
aCookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(aCookie);

【讨论】:

    最近更新 更多