Android 登录Web 时对cookie 处理

作者:lqh 时间:2022-05-08 20:16:11 

对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可。

但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行cookie的读写。

httpclient相当强大,读写cookie非常容易:


CookieStore cookies=((AbstractHttpClient)client).getCookieStore();//读cookie
((AbstractHttpClient) client).setCookieStore(cookies);//写cookie

另外的一个问题是,为了在各个activity之间使用一个共通的cookie,需要一个全局变量来解决问题。对于java来说,可以使用静态类,但是对于android来说,更符合android结构的作法是使用拥有这些activity的application类:

首先声明一个application类用来存取cookie:


public class myApp extends Application {

private CookieStore cookies;
 public CookieStore getCookie(){  
   return cookies;
 }
 public void setCookie(CookieStore cks){
   cookies = cks;
 }
}

另外,要在AndroidManifest.xml文件中将上面声明的这个类绑定到包含所有activity的application上,方法是为application标签加 android:name=".myApp"

这样就可以在Activity中使用这个“全局变量”了:


//设置cookie
myApp appCookie = ((myApp)getApplication());  
appCookie.setCookie(cookies);
//读取cookie
myApp appCookie = ((myApp)getApplicationContext());
cookies = appCookie.getCookie();

经过以上的步骤,android程序完成一个Web登录后就可以保持登录的状态了。

ps.

从一个httpclient取得statuscode的方法:


HttpResponse response = client.execute(mypost);
int statuscode = response.getStatusLine().getStatusCode();

做的一个是要登录自己的图书馆账号,用于查看自己所借阅的书籍,

看了一下图书馆的代码,发现是POST用户名和密码,

而在代码实现主要有两个难点:一、保存账号密码 二、保存Cookie

那么 ,第一个可以使用之前提到过的Sharedpreference ,每次就直接从sharedpreference里获取账号名和密码就可以了,不需要每次都输入

第二个怎么获得服务器的cookie呢,知道这次的session id

通过Httpclient 中的getcookiestore


List<Cookie> cookies = httpclient.getCookieStore().getCookies();  
if (cookies.isEmpty()) {  
Log.i(TAG, "-------Cookie NONE---------");  
} else {          
for (int i = 0; i < cookies.size(); i ) {  
//保存cookie  
cookie = cookies.get(i);  
Log.d(TAG, cookies.get(i).getName() "=" cookies.get(i).getValue() );  
}

获得了session id后,怎么再添加到我们的POST或者GET请求里面呢,



HttpPost httpPost = new HttpPost(访问地址);
httpPost.setHeader("Cookie", "JSESSIONID=" + 我们在静态变量里存放的SessionId);
HttpResponse httpResponse = httpclient.execute(httpPost);
HttpGet request = new HttpGet(url+"?"+Params);
   request.setHeader("Cookie",Sessionid);
标签:Android,登录Web,cookie
0
投稿

猜你喜欢

  • Android编程实现XML解析与保存的三种方法详解

    2022-04-15 00:39:01
  • Android 通过Messager与Service实现进程间双向通信案例详解

    2021-10-04 13:53:18
  • java图形界面之布局设计

    2021-11-10 16:07:40
  • Java实现删除排序数组中重复元素的方法小结【三种方法比较】

    2023-09-28 15:21:48
  • 轻松学习C#的属性

    2022-07-21 06:24:04
  • Flutter Animation实现缩放和滑动动画效果

    2021-09-02 10:33:12
  • Java人民币小写转大写字符串的实现

    2021-10-24 00:52:34
  • java:无法访问org.springframework.boot.SpringApplication的解决方法

    2022-07-14 05:24:29
  • java生成图片验证码功能

    2023-06-27 00:31:55
  • 浅析Java中的内存泄漏

    2023-12-19 02:29:02
  • Java自带定时任务ScheduledThreadPoolExecutor实现定时器和延时加载功能

    2023-02-24 13:52:03
  • C#获取图片文件扩展名的方法

    2022-03-06 04:27:43
  • Java中的Object.getClass()方法解析

    2022-05-06 18:54:48
  • Android实现多线程断点下载

    2023-08-11 00:45:28
  • Java之Mybatis多层嵌套查询方式

    2023-06-17 11:48:52
  • 详解JDK中ExecutorService与Callable和Future对线程的支持

    2023-11-25 07:39:07
  • Mybatis 入门之MyBatis环境搭建(第一篇)

    2023-03-15 16:09:32
  • MyBatis-plus实现逆向生成器

    2021-08-26 16:37:14
  • Flutter实现手势识别功能详解方法

    2022-12-21 15:41:41
  • java多线程并发中使用Lockers类将多线程共享资源锁定

    2021-11-14 11:08:37
  • asp之家 软件编程 m.aspxhome.com