android服务端 session,android端和服务端session保持

博客围绕Android服务端保持session展开。作者最初采用定时调用服务器的方法,过程中遇到timeoutException、ClientProtocolException等问题,发现是重定向所致。设置禁止重定向又引发登录报302问题,且AsyncHttpClient自动保存CookieStore为null,导致session超时,最终通过手动添加CookieStore解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了保持服务端的session,我首先想到的办法就是没隔一段时间调用一下我们的服务器。

之前出了总总问题,什么timeoutException,ClientProtocolException等等问题,我讲慢慢解释.

我在service中做轮询调用服务器保持session时,只要出现一次timeoutexception,接着就会出现ClientProtocolException,后来发现这是重定向导致的问题,然后在AsyncHttpClient中设置了

client.setEnableRedirects(false);

client.getHttpClient().getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, false);但是这么一设置又会出一个问题,我在登录的时候总是报302,又回到了重定向的问题。

我发现服务端在给我设置attribute传递cookies的时候,使用了重定向。没办法,只能将setEnableRedirects再次打开。

还有一个问题就是在AsyncHttpClient话说是自动保存CookieStore的,但是我打印了log,结果CookieStore是为null,导致我在做轮询的时候,是没有向服务端提交Cookie的,这样过了30分钟服务端的session任然会超时。

于是手动的加上

CookieStore cookieStore = new PersistentCookieStore(this);

cline.setCookieStore(cookieStore);

然后打印log

CookieStore cookieStore = new PersistentCookieStore(this);

cline.setCookieStore(cookieStore);

HttpContext httpContext = cline.getHttpContext();

CookieStore cookies = (CookieStore) httpContext.getAttribute(ClientContext.COOKIE_STORE);

if(cookies!=null){

for(Cookie c:cookies.getCookies()){

LogUtil.d("login activtity onsuccess before ~~"+c.getName(),c.getValue());

}

}else{

LogUtil.d("login activtity onsuccess before~~","cookies is null");

}发现这次才有值。

哈哈,明白了吧,你需要在登录的时候手动添加

CookieStore cookieStore = new PersistentCookieStore(this);

cline.setCookieStore(cookieStore);才可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值