You need to enable JavaScript to run this app. JavaScript中如何整合Cookie操作与自定义deny函数实现带校验的Prompt登录
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何整合Cookie操作与自定义deny函数实现带校验的Prompt登录

权限校验与Cookie登录功能的整合实现方案

核心调整逻辑

  • 移除原页面onload事件中并行调用两个函数的写法(原写法会同时弹出两次输入Prompt,完全打乱交互顺序)
  • 调整执行链路:页面加载后优先触发权限校验逻辑,根据校验结果决定后续Cookie操作与页面跳转,不再重复弹出旧示例里不带问号的重复输入框
  • 修复原deny()函数的语法问题:原代码中case "Bla","bla"的写法不符合JS语法规范,会导致大写输入的“Bla”无法命中权限允许分支,统一将用户输入转小写、去首尾空格后做匹配,降低校验误判概率
  • 严格匹配预设的功能规则:
    1. 页面加载后第一个弹出的输入框,固定使用带问号的提示文本
    2. 校验逻辑仅识别输入为"bla"的用户为合法访问者
    3. 合法输入场景:将用户名写入有效期30天的Cookie,弹出权限允许提示后跳转到指定目标链接
    4. 非法输入、空输入、用户取消输入的场景:弹出对应提示后,跳转到javascript:void(0);的无跳转停留状态,不执行Cookie写入操作

调整后的完整可运行代码

<body onload="initAuth()">
  <script type="text/javascript">
    // 基础Cookie操作函数保持原参考示例的逻辑不变
    function setCookie(cname, cvalue, exdays) {
      const date = new Date();
      date.setTime(date.getTime() + (exdays * 24 * 60 * 60 * 1000));
      const expires = "expires=" + date.toGMTString();
      document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
    }
    function getCookie(cname) {
      const name = cname + "=";
      const decodedCookie = decodeURIComponent(document.cookie);
      const ca = decodedCookie.split(';');
      for (let i = 0; i < ca.length; i++) {
        let c = ca[i];
        while (c.charAt(0) == ' ') {
          c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
          return c.substring(name.length, c.length);
        }
      }
      return "";
    }

    // 整合权限校验、Cookie读写、页面跳转的统一入口
    function initAuth() {
      // 第一时间弹出带问号的输入框收集用户信息
      const sign = prompt("请输入你的姓名?")?.toLowerCase().trim();
      const tipHi = "你好!";
      const tipProcess = " 正在为你处理请求。";
      const tipAllow = "访问权限已开通。";
      const tipDeny = "访问被拒绝。";

      // 空输入/取消输入的分支处理
      if (sign === undefined || sign === "") {
        alert("你尚未输入姓名!");
        window.location.href = "javascript:void(0);";
        return;
      }

      // 合法权限分支:仅输入为bla时执行Cookie存储与跳转
      if (sign === "bla") {
        alert(tipHi + "Bla" + tipProcess);
        alert(tipAllow);
        // 存储有效期30天的用户名Cookie
        setCookie("username", sign, 30);
        // 读取已存储的Cookie,弹出欢迎提示
        const savedUser = getCookie("username");
        if (savedUser) alert("欢迎回来," + savedUser);
        // 替换为你实际需要跳转的目标链接
        window.location.href = "你的指定跳转链接";
        return;
      }

      // 非法输入分支处理
      alert(tipHi + sign + tipProcess);
      alert(tipDeny + "抱歉,我们未识别到你的访问权限!");
      window.location.href = "javascript:void(0);";
    }
  </script>
</body>

实现效果说明

  • 完全去掉了旧代码里连续弹出两个输入框的问题,交互顺序完全匹配需求
  • 输入处理增加了去空格、统一转小写的兼容逻辑,避免用户输入时带了前后空格、输了大写Bla就被判定为非法的问题
  • Cookie的作用域保持为整个域名,确保同域名下所有页面都能正常读取存储的登录信息

内容的提问来源于stack exchange,提问作者User not found

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 05:45:03