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);
猜你喜欢
- 本文通过是 * 实现的AOP功能的封装与配置的小框架.加深对 * 和AOP编程的理解设计根据配置文件的键xxx对应的值(类全名)创建相应
- 本文以实例形式简单讲述了引用类型转换的几种常见方式,如:子类转换成父类,父类转换成子类,以及不是子父级关系类之间的转换。现分述如下,供大家参
- 使用IDEA开发微服务项目,需要启动多个微服务,可以开启IDEA的Run DashBoard窗口,需要对IDEA中指定工程的父工程进行配置进
- 前言Spring5带来了新的响应式web开发框架WebFlux,同时,也引入了新的HttpClient框架WebClient。WebClie
- 本文实例为大家分享了Java网络编程TCP程序设计的具体代码,供大家参考,具体内容如下[1] TCP编程的主要步骤客户端(client):1
- 参数校验主要使用两个标签@Validated和@Valid;@Valid是Hibernate的注解校验,@Validated是spring的
- SpringBoot启动自动终止也不报错Error starting ApplicationContext. To display the
- 首先是按行读取字符串import java.io.BufferedReader;import java.io.File;import jav
- 作为一个合格的开发人员,对项目进行管理自然必不可少。今天就给各位看客介绍一下如何用git将自己的AS项目上传到码云。
- 1. ThreadLocal详解JDK1.2版本起,Java就提供了java.lang.ThreadLocal,ThreadLocal为每个
- 一、前期准备我们要在IDEA上创建一个新的项目,创建好一个项目后,我们需要创建4个包,分别是英雄包,装备包,铭文包,野怪包,皮肤包然后我们就
- 访问权限符:(1)public:对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中。对于类来说:  
- 方法一:(经试验无效,但网上广为流传,也许是我使用方法不当,有待进一步验证……)android想要应用运行时全屏有一种方法是在activit
- Eclipse的应用需要众多的插件,但是Eclipse的插件大家又知道多少呢?“Eclipse最牛的30个插件”不知道看官们是否了解,51C
- 本文实例为大家分享了Android PopupWindow增加半透明蒙层的具体代码,供大家参考,具体内容如下先看效果图:实现代码:BaseP
- 先给大家展示下效果图吧直接上代码:xml的布局:<Button android:id="@+id/btn_jp"
- 本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal.最近整理公司项目,发现不少写
- 假定存在这样一种情况多个用户对数据库进行写,我们的业务逻辑规定,每个用户只能写一次,大部分用户也只发一次请求。public void wri
- 先给大家介绍下Java获取上月份最后一天日期8位。代码如下所示:/** * 获取上个月的最后一天23点59分59
- 效果图如下所示:一、shape 样式:(在drawable新建--》new--》Drawable resource file 在父级标签se