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

Android不同Activity同一会话请求Servlet无法识别会话问题

问题根因

Java Servlet的会话身份识别依赖请求头Cookie字段中携带的JSESSIONID值,你虽然在登录成功后获取到了会话ID,但是后续请求中没有将会话ID正确填充到请求头的Cookie字段中,服务端无法识别当前请求对应的已登录会话,因此返回未登录的报错。

修复方案

方案1:手动在后续请求中携带JSESSIONID

修改你的CustomRequest类,重写getHeaders方法,将传入的sessionId按规范写入Cookie头:

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    Map<String, String> headers = new HashMap<>();
    // 填入会话ID
    if (sessionId != null && !sessionId.trim().isEmpty()) {
        headers.put("Cookie", "JSESSIONID=" + sessionId);
    }
    return headers;
}

确认你传入CustomRequest构造函数的sessionId参数已经被正确接收并在上述方法中使用即可。

方案2:开启Volley全局Cookie自动管理(更省心)

不需要手动解析、传递sessionId,直接让Volley自动处理所有Cookie:
在你应用的Application类的onCreate方法中添加如下初始化代码:

// 初始化全局Cookie管理器
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

这样登录请求收到的服务端Set-Cookie响应头会被自动保存,后续所有请求都会自动携带对应的Cookie信息,无需手动处理会话ID。

优化建议

你当前的登录接口使用GET方法传递账号密码,敏感信息会明文出现在请求URL、服务端日志中,存在泄露风险,建议将登录接口改为POST方法,参数放在请求体中传输。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:00