You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Cookie存储Prompt输入脚本异常:生成cookie_date而非预期内容

问题分析与修复

你的代码存在三个核心问题,导致未弹出Prompt且生成异常Cookie:

  1. Cookie设置格式错误:
    直接将Prompt输入赋值给document.cookie不符合Cookie的标准格式(必须是key=value),浏览器会对这种不规范的赋值做异常处理,这就是你看到"cookie_date"这类奇怪Cookie的原因。

  2. Cookie存在性判断逻辑错误:
    用document.cookie === ""判断是否需要弹出Prompt是错误的——只要页面存在任何其他Cookie,这个条件就不成立,直接跳过Prompt逻辑。我们应该检查**我们需要的特定Cookie(比如username)**是否存在,而非全局Cookie是否为空。

  3. Cookie值获取错误:
    document.cookie返回的是所有Cookie的拼接字符串(格式如"key1=value1; key2=value2"),直接赋值给person无法拿到我们需要的单个输入值,后续的判断逻辑自然失效。


修正后的代码

window.addEventListener("DOMContentLoaded", () => {
  // 从Cookie中获取指定键的值
  function getCookie(name) {
    const value = `; ${document.cookie}`;
    const parts = value.split(`; ${name}=`);
    if (parts.length === 2) return parts.pop().split(';').shift();
  }

  let person = getCookie("username");
  // 如果没有username Cookie,弹出Prompt并设置Cookie
  if (!person) {
    person = prompt("Please enter your name", "");
    if (person) {
      // 设置标准格式的Cookie,可添加过期时间等参数
      document.cookie = `username=${encodeURIComponent(person)}; path=/`;
    }
  }

  if (!person) return;
  const text = person.toLowerCase() === "pyro" ? 
    "hey, me! hope you've been making substantial changes!" : 
    `welcome, ${person}, to the pyrogaming/covid2009 homepage! <br> did you know you can drag the fake windows around?`;
  document.getElementById("name").innerHTML = text;
});

关键修复说明

  • 添加了getCookie函数,专门提取指定键的Cookie值,避免直接操作全局Cookie字符串。
  • 改为检查usernameCookie是否存在,确保只有当我们需要的Cookie不存在时才弹出Prompt。
  • 设置Cookie时使用标准格式username=值,并通过encodeURIComponent处理特殊字符,同时指定path=/确保Cookie在全站生效。
  • 增加了对Prompt取消操作的判断(用户点击取消时person为null,不设置Cookie)。

内容的提问来源于stack exchange,提问作者Pyro Gaming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:40:07