大树12999 2015-09-24 07:11 采纳率: 0%
浏览 1137

android 每次请求服务器的sessionid不一样

我用的是KJFrameForAndroid写的,请求过去的登陆sessionid
与请求消息数据获取的sessionid不同,这样在服务器就如同没有登陆去获取
消息数据,这是不行的,大家有什么办法可以解决呢?

  • 写回答

1条回答 默认 最新

  • 秋风お亦冷 2023-07-17 17:41
    关注

    在 Android 应用中,每次向服务器发起请求时,如果每次请求的 sessionid 都不一样,可能是因为每次请求时都创建了一个新的 HTTP 连接,并且没有复用已经建立的连接。这可能会导致服务器无法正确地管理客户端的会话状态,从而导致 sessionid 不一致的问题。

    为了解决这个问题,可以考虑使用 HTTP 连接池来复用已经建立的连接。在 Android 中,可以使用 Apache HttpClient 或 OkHttp 等第三方库来实现连接池的功能。这些库都提供了连接池的管理机制,可以帮助应用复用已经建立的连接,从而减少每次请求时建立新连接的开销。

    另外,如果服务器端的 session 管理方式是基于 cookie 的,那么还需要确保每次请求都携带相同的 cookie。在 Android 中,可以通过设置请求头来实现这个功能。例如,在使用 OkHttp 发起请求时,可以通过设置 Request.Builder 的 header 字段来添加 Cookie 头部,示例代码如下:

    OkHttpClient client = new OkHttpClient.Builder()
            .cookieJar(new JavaNetCookieJar(cookieManager))
            .build();
    
    Request request = new Request.Builder()
            .url(url)
            .addHeader("Cookie", "sessionid=" + sessionId)
            .build();
    
    Response response = client.newCall(request).execute();
    

    其中,cookieManager是一个 CookieManager 对象,用于管理应用的 cookie。sessionId 是服务器返回的 session id,可以保存在应用中供后续使用。

    如果是Nginx作为负载均衡,代码内不配置session一致性的话,就在配置nginx:加入ip_hash开启会话保持

    upstream group {
        ip_hash;
        server 172.23.0.1;
        server 172.23.0.2;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题