gpt4 book ai didi

javascript - 我的 cookie 在 session 之间无法保留?

转载 作者:行者123 更新时间:2023-12-02 22:18:33 25 4
gpt4 key购买 nike

我有一个 cookie,它保存了一些相当良性的数据,我用它来检查 Changelog 模式窗口是否应该出现在页面上。当我加载页面时,根本没有 cookie。该项目在 IIS 上运行,使用 .NET Core 2.2 以及 ASP 和 MVC。所以我执行以下操作:

function showChangelog(override = false) {
let newestEntryId = getNewestChangelogVersion();
let cookieEntryId = getCookieChangelogVersion();
if (newestEntryId > cookieEntryId) {
setCookieDetails(false, newestEntryId);
cookieEntryId = newestEntryId;
}

let changelogPersistence = getCookieChangelogPersistence();
if (changelogPersistence === false || override === true) {
let modalBody = $('#changelogModalBody');
...
...

发生的情况是这样的:

  • 第一次检查返回 0。这是应该的。这是变更日志对象中的最新条目。
  • 第二次检查返回 -1。正如它应该。此阶段没有可检查的 cookie,因此我返回 -1 来表明这一点。
  • 然后我看看从变更日志中收集的最新条目是否高于 cookie 中的条目。如果是,则覆盖它并将新版本号写入 cookie。这会生成以下 cookie:

"dontPersistChangelog=false; changelogVersion=0; path=/; expires=Tue, 06 Sep 2022 13:54:33 GMT"

  • 然后,通过这个新 cookie,我检查 cookies 持久性标志是 true 还是 false。如果是 true,则不显示该窗口。如果为 false,则显示窗口。
  • 然后代码继续使窗口显示所有相关信息。听起来不错。

为了更好地衡量,这里是设置 cookie 的代码:

/**
* Used to set the website cookie for the changelog window.
* @param {boolean} persistence Whether the changelog should not persist (true) or persist (false)
* @param {number} version What version of the log is being put in the cookie.
*/
function setCookieDetails(persistence, version) {
let expirationDate = new Date();
expirationDate.setDate(expirationDate.getDate() + 999);
let persistChangeLog = 'dontPersistChangelog=' + persistence;
let changelogVersion = 'changelogVersion=' + version;
document.cookie = persistChangeLog;
document.cookie = changelogVersion;
document.cookie = 'path =/';
document.cookie = 'expires=' + expirationDate.toUTCString();
}

这里是令人费解的部分;当我关闭浏览器并重新启动浏览器时,实际的 cookie 就会存在。我使用浏览器中的控制台进行了检查。就好像它被删除了然后就消失了。我的印象是 document.cookie 与 session cookie 相同?它可以通过单独的 session 持续存在吗?

我尝试了带有和不带有过期日期的 cookie。无论哪种方式,cookie 都会被删除。当我在 Visual Studio 中运行项目或在 IIS 上运行部署版本时,都会发生这种情况。

我可能做错了什么?

最佳答案

参见https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie

我认为您对 document.cookie 的调用不会更新现有 cookie 的属性。 Cookie 的属性以分号分隔并存储为字符串。

所以你设置了一个 cookie,如下所示:

function resetOnce() { 
document.cookie = "doSomethingOnlyOnce=; expires=Thu,01 Jan 2050 00:00:00 GMT";
}

对于上面的函数:

function setCookieDetails(persistence, version) {
let expirationDate = new Date();
expirationDate.setDate(expirationDate.getDate() + 999);
let persistChangeLog = 'dontPersistChangelog=' + persistence;
let changelogVersion = 'changelogVersion=' + version;
document.cookie = persistChangeLog + ";path =/;expires=" + expirationDate.toUTCString();
document.cookie = changelogVersion + ";path =/;expires=" + expirationDate.toUTCString();}

关于javascript - 我的 cookie 在 session 之间无法保留?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59307529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com