Android 登录Web 时对cookie 处理
对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可。
但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行cookie的读写。
httpclient相当强大,读写cookie非常容易:
CookieStorecookies=((AbstractHttpClient)client).getCookieStore();//读cookie ((AbstractHttpClient)client).setCookieStore(cookies);//写cookie
另外的一个问题是,为了在各个activity之间使用一个共通的cookie,需要一个全局变量来解决问题。对于java来说,可以使用静态类,但是对于android来说,更符合android结构的作法是使用拥有这些activity的application类:
首先声明一个application类用来存取cookie:
publicclassmyAppextendsApplication{ privateCookieStorecookies; publicCookieStoregetCookie(){ returncookies; } publicvoidsetCookie(CookieStorecks){ cookies=cks; } }
另外,要在AndroidManifest.xml文件中将上面声明的这个类绑定到包含所有activity的application上,方法是为application标签加android:name=".myApp"
这样就可以在Activity中使用这个“全局变量”了:
//设置cookie myAppappCookie=((myApp)getApplication()); appCookie.setCookie(cookies); //读取cookie myAppappCookie=((myApp)getApplicationContext()); cookies=appCookie.getCookie();
经过以上的步骤,android程序完成一个Web登录后就可以保持登录的状态了。
ps.
从一个httpclient取得statuscode的方法:
HttpResponseresponse=client.execute(mypost); intstatuscode=response.getStatusLine().getStatusCode();
做的一个是要登录自己的图书馆账号,用于查看自己所借阅的书籍,
看了一下图书馆的代码,发现是POST用户名和密码,
而在代码实现主要有两个难点:一、保存账号密码二、保存Cookie
那么,第一个可以使用之前提到过的Sharedpreference,每次就直接从sharedpreference里获取账号名和密码就可以了,不需要每次都输入
第二个怎么获得服务器的cookie呢,知道这次的sessionid
通过Httpclient中的getcookiestore
List<Cookie>cookies=httpclient.getCookieStore().getCookies(); if(cookies.isEmpty()){ Log.i(TAG,"-------CookieNONE---------"); }else{ for(inti=0;i<cookies.size();i){ //保存cookie cookie=cookies.get(i); Log.d(TAG,cookies.get(i).getName()"="cookies.get(i).getValue()); }
获得了sessionid后,怎么再添加到我们的POST或者GET请求里面呢,
HttpPosthttpPost=newHttpPost(访问地址); httpPost.setHeader("Cookie","JSESSIONID="+我们在静态变量里存放的SessionId); HttpResponsehttpResponse=httpclient.execute(httpPost); HttpGetrequest=newHttpGet(url+"?"+Params); request.setHeader("Cookie",Sessionid);
以上就是对Android登录Web以及登录保持,对cookie的管理,有需要的朋友可以参考下。