【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 1645|回复: 0

[Android实例] android登录Web以及登录保持,cookie管理相关

[复制链接]
发表于 2013-2-6 14:43:53 | 显示全部楼层 |阅读模式
对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可。
但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行cookie的读写。
httpclient相当强大,读写cookie非常容易:
  1. CookieStore cookies=((AbstractHttpClient)client).getCookieStore();//读cookie
  2. ((AbstractHttpClient) client).setCookieStore(cookies);//写cookie
复制代码
另外的一个问题是,为了在各个activity之间使用一个共通的cookie,需要一个全局变量来解决问题。对于java来说,可以使用静态类,但是对于android来说,更符合android结构的作法是使用拥有这些activity的application类:
首先声明一个application类用来存取cookie:
  1. public class myApp extends Application {
  2.     private CookieStore cookies;   
  3.     public CookieStore getCookie(){   
  4.         return cookies;
  5.     }
  6.     public void setCookie(CookieStore cks){
  7.         cookies = cks;
  8.     }
  9. }
复制代码
另外,要在AndroidManifest.xml文件中将上面声明的这个类绑定到包含所有activity的application上,方法是为application标签加 android:name=".myApp"
这样就可以在Activity中使用这个“全局变量”了:
  1. //设置cookie
  2. myApp appCookie = ((myApp)getApplication());   
  3. appCookie.setCookie(cookies);
  4. //读取cookie
  5. myApp appCookie = ((myApp)getApplicationContext());
  6. cookies = appCookie.getCookie();
复制代码
经过以上的步骤,android程序完成一个Web登录后就可以保持登录的状态了。
ps.
从一个httpclient取得statuscode的方法:
  1. HttpResponse response = client.execute(mypost);
  2. int statuscode = response.getStatusLine().getStatusCode();
复制代码
做的一个是要登录自己的图书馆账号,用于查看自己所借阅的书籍,看了一下图书馆的代码,发现是POST用户名和密码,
而在代码实现主要有两个难点:一、保存账号密码 二、保存Cookie那么 ,第一个可以使用之前提到过的Sharedpreference ,每次就直接从sharedpreference里获取账号名和密码就可以了,不需要每次都输入

第二个怎么获得服务器的cookie呢,知道这次的session id
通过Httpclient 中的getcookiestore
  1. List<Cookie> cookies = httpclient.getCookieStore().getCookies();     
  2. if (cookies.isEmpty()) {      
  3. Log.i(TAG, "-------Cookie NONE---------");     
  4. } else {                     
  5. for (int i = 0; i < cookies.size(); i ) {      
  6. //保存cookie      
  7. cookie = cookies.get(i);     
  8. Log.d(TAG, cookies.get(i).getName() "=" cookies.get(i).getValue() );      
  9. }  
复制代码
获得了session id后,怎么再添加到我们的POST或者GET请求里面呢,
  1. HttpPost httpPost = new HttpPost(访问地址);   
  2. httpPost.setHeader("Cookie", "JSESSIONID=" + 我们在静态变量里存放的SessionId);   
  3. HttpResponse httpResponse = httpclient.execute(httpPost);   
  4. HttpGet request = new HttpGet(url+"?"+Params);   
  5.   request.setHeader("Cookie",Sessionid);  
复制代码
转自:http://blog.csdn.net/t80t90s/article/details/7967452





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-9-27 22:19

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表