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