Android 分析android 客户端保持session 不过期的方式

首先要知道session和cookie,session是存在服务器的的用来区分不同的会话的,是一种服务器机制,cookie 是客户端登陆服务器以后,服务器需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识-称为session id,如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用.如果客户请求不包含session id,则为此客户创建一个session并且生成一个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。

一般开源的框架都会把这个session_id 存贮在cookie中,注意这个session_id是会话的标识。不要直接明文存储。

回归正题,客户端登录时,将用户名,密码加密存贮在本地。同时将将cookie(或者session_id)保存起来,下次访问服务器是,把它带上,服务器端就能识别你已经登陆过了,但是我们知道服务器的session 是有时间限制的,默认是如果客户端20分钟以内没有访问服务器,这个session_id就过期了,在服务器端不存在了,但是客户端可能还认为自己没有掉线。怎么解决这个问题呢?
方案1、将session 设置成拥挤不过期,这样确实可以解决客户端的session 过期的问题,但是不推荐。这样服务器端session一直不销毁,会占用内存,越来越来越多。
方案2.心跳机制。这是最常见的客户端保持会话不过期的方法。简单的做法就是写个定时器,美隔几分钟发送广播,收到广播后收客户端去访问服务器。当然也有问题。这个方式。举个例子说下他的问题吧。比如虽然写了个定时器去访问服务器,但是如果这段时间(假如30分钟),客户端正好把网络给关了,31分钟后客户端又打开了网络连接,由于30分钟没有访问服务器 你调用A()方法的时候返回的结果是{“error”:"login"},然后你根据结果再去调用B() 登陆方法,登陆成功后,在自动A()方法。这样的话,每次访问网络都要更这个B()登陆方法,代码臃肿。而且费电。
方法3:服务器自动登登陆的方法
客户端访问服务器事,同时带着用户名,和密码,还有cookie(session_id),服务器先判断session_id 是否过期,如果过期,在判读参数中有用户名和密码,如果有,就在调用一下登录的方法,登录成功后,就接着操作。。这种方法的缺点就是每次都要带个账号和密码,稍微有点耗流量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值