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

使用Java Servlet实现服务端存储替代客户端Session Storage咨询

Java Servlet 实现服务端存储替代 Session Storage 落地方案

1. 核心选型说明

Servlet 规范自带的 HttpSession 本身就是服务端会话存储能力,完全匹配原有 Session Storage 的会话级存储生命周期(浏览器关闭自动失效),无需额外引入基础组件,可直接复用容器(Tomcat、Jetty 等)的会话管理能力,容器会自动生成 JSESSIONID Cookie 关联客户端和服务端会话。

2. 服务端接口实现

直接编写统一的存储操作 Servlet 即可,支持存、取、删三类基础操作:

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/server-storage")
public class ServerStorageServlet extends HttpServlet {
    // 存储数据:对应原 sessionStorage.setItem
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        String key = request.getParameter("key");
        String value = request.getParameter("value");
        request.getSession().setAttribute(key, value);
        response.getWriter().write("{\"code\":200,\"msg\":\"存储成功\"}");
    }

    // 查询数据:对应原 sessionStorage.getItem
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        String key = request.getParameter("key");
        Object value = request.getSession().getAttribute(key);
        String res = String.format("{\"code\":200,\"data\":\"%s\"}", value == null ? "" : value);
        response.getWriter().write(res);
    }

    // 删除数据:对应原 sessionStorage.removeItem
    @Override
    protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        String key = request.getParameter("key");
        request.getSession().removeAttribute(key);
        response.getWriter().write("{\"code\":200,\"msg\":\"删除成功\"}");
    }
}

3. 客户端适配改造

把原有的 Session Storage 操作替换为接口调用即可,可封装统一工具函数对齐原有调用逻辑:

// 存储数据
async function setServerStorage(key, value) {
  await fetch('/server-storage', {
    method: 'POST',
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    body: `key=${encodeURIComponent(key)}&value=${encodeURIComponent(value)}`
  })
}

// 读取数据
async function getServerStorage(key) {
  const res = await fetch(`/server-storage?key=${encodeURIComponent(key)}`)
  const result = await res.json()
  return result.data
}

// 删除数据
async function removeServerStorage(key) {
  await fetch(`/server-storage?key=${encodeURIComponent(key)}`, {method: 'DELETE'})
}

4. 生产环境优化配置

  • 会话有效期调整:在项目 web.xml 中添加配置,对齐原有业务的会话过期规则:
<session-config>
    <!-- 单位为分钟,默认30分钟,设置为-1表示永不超时(不推荐) -->
    <session-timeout>30</session-timeout>
    <cookie-config>
        <!-- 开启HttpOnly防止XSS窃取会话ID -->
        <http-only>true</http-only>
        <!-- HTTPS环境下开启防止会话劫持 -->
        <secure>true</secure>
    </cookie-config>
</session-config>
  • 多实例部署适配:如果需要集群部署会话共享,直接集成 Spring Session 或容器自带的 Redis 会话同步方案即可,无需修改业务代码。
  • 权限校验:接口层统一添加登录态校验逻辑,避免未授权用户读写他人存储数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:54:03