如何获取Session ID并传入加密函数?附登录页认证代码求助
登录页Session密钥/ID获取与加密函数传入方案
先明确核心概念
你代码里的__GETLOGINKEY是服务器存在Session中的加密密钥,和Session ID(客户端Cookie里的JSESSIONID,会话标识)是两个不同的东西,先搞清楚你实际需要的是哪一个。
场景一:JSP后端渲染页面(改造你提供的代码)
你的代码本身是JSP脚本,但存在语法错误,同时要确保后端已提前存入密钥:
- 修复引号嵌套问题:JSP脚本里的双引号和外层JS的双引号冲突,二选一修改:
// 写法1:用单引号包裹JSP脚本 a2 = encrypt.AESEncrypt(a2, '<%=(String)session.getAttribute("__GETLOGINKEY")%>', 256); // 写法2:转义内部双引号 a2 = encrypt.AESEncrypt(a2, "<%=(String)session.getAttribute(\"__GETLOGINKEY\")%>", 256); - 确保后端存入密钥:在处理登录页请求的Servlet/Controller中,提前把生成的AES密钥存入Session:
// Java后端示例(Servlet) String loginKey = 生成AES256密钥的方法(); // 比如用KeyGenerator生成后转成字符串 request.getSession().setAttribute("__GETLOGINKEY", loginKey);
场景二:前后端分离(纯前端JS调用)
如果登录页是纯前端(Vue/React等),不能直接用JSP脚本,需要后端提供接口:
- 后端写接口返回密钥:
// 示例Servlet接口,路径设为/api/get-login-key protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String loginKey = (String) request.getSession().getAttribute("__GETLOGINKEY"); response.setContentType("text/plain"); response.getWriter().write(loginKey); } - 前端先请求密钥再加密:
// 用fetch请求示例 fetch('/api/get-login-key') .then(res => res.text()) .then(key => { a2 = encrypt.AESEncrypt(a2, key, 256); // 拿到加密后的数据再提交登录请求 }) .catch(err => console.error('获取密钥失败', err));- 注:跨域场景下要在fetch里加
credentials: 'include',确保携带Session Cookie。
- 注:跨域场景下要在fetch里加
如果确实需要的是Session ID(而非加密密钥)
如果你的需求是把Session ID传入加密函数,分两种方式获取:
- JSP后端渲染时直接获取:
a2 = encrypt.AESEncrypt(a2, '<%=session.getId()%>', 256); - 前端JS从Cookie读取:
// 封装读取Cookie的方法 function getJSESSIONID() { const cookieArr = document.cookie.split('; '); for (let item of cookieArr) { if (item.startsWith('JSESSIONID=')) { return item.split('=')[1]; } } return null; } // 使用 const sessionId = getJSESSIONID(); if (sessionId) { a2 = encrypt.AESEncrypt(a2, sessionId, 256); }
内容的提问来源于stack exchange,提问作者Nelza
相关产品推荐
相关产品推荐

