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

标签 javascript cookies

我有一个 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/

相关文章:

javascript - 将 Html 表转换为 JSON

javascript - jQuery 可重用函数和全局变量

cookies - 设置 cookie header 不起作用

javascript - 设置cookie跨原点

ruby - 我如何在 capybara 中使用我自己的 cookie?

javascript - Accordion 不会使页面变长

javascript - 比较 2 个对象数组是否匹配,无论其在 lodash 中的索引如何?

javascript ,在名称也是 attrName 的函数中使用 this.attrName

c# - 在带有 Razor 的 Asp.net MVC 中重新登录时显示最后的 cookie 值(即注销后再次登录)

security - 是否存在防止 cookie 被盗的方法?