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

