Android 登录Web 时对cookie 处理

对于登录功能本身没有任何特别,使用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实现http中请求访问添加cookie的方法

    本文实例讲述了android实现http中请求访问添加cookie的方法.分享给大家供大家参考,具体如下: 第一种 HashMap<String, String> map = new HashMap<String, String>(); map.put("cookie","p1u_id=4eb591e73554db0f4d3300cb656113abfb968ef6b0ee2b5de0a35caa5217c51faa028b453576b35c&quo

  • AndroidHttpClient使用Cookie应用分析

    今天想把一个用使用了HttpClient的自动签到小程序移植到Android上,还好Android的SDK自带了HttpClient的包.翻Android的文档时发现官方还提供了一个实现了HttpClient接口的AndroidHttpClient,上网搜了下没发现关于AndroidHttpClient的文章.当然也可以继续使用DefaultHttpClient,但用为Android定制的AndroidHttpClient自然更好. 下面是2个测试用的HttpServlet: 复制代码 代码如下

  • Android 中cookie的处理详解

    android 客户端 Cookie处理 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明. 发起 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器,客户端),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启

  • Android 登录Web 时对cookie 处理

    对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可. 但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行cookie的读写. httpclient相当强大,读写cookie非常容易: CookieStore cookies=((AbstractHttpClient)client).getCookieStore();//读cookie ((AbstractHttpClient) client).setCooki

  • PHP读取CURL模拟登录时生成Cookie文件的方法

    本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登录时会保存一个Cookie文件,例如下面的代码 复制代码 代码如下: $login_url = 'XXX';    $post_fields['email'] = 'XXXX';  $post_fields['password'] = 'XXXX';  $post_fields['origURL'] = 'XXX';  $post_fields['doma

  • Android登录记住多个密码的实现方法

    先给大家说下我实现的思路: 在popouWindow里面加上ListView,数据是把List以字符串按照JSON的样式存入本地,先看看效果 adapter_user_item.xml是listView item中的布局,就一个图片按钮和一个显示按钮 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/

  • Android 登录处理简单实例(源码下载)

    Android 登录处理简单实例 今天整理一下之前在项目中写的关于某些界面需要登录判断处理.这里整理了一个简易的 Demo 模拟一下 登录情况 和 未登录情况 下的界面跳转处理, 效果如图: 以上分别模拟了,未登录和已登录 情况下的 界面跳转和当前界面事件处理.接下来我们来看一下实现方式. 先从核心代码开始看: public class GoLoginUtil { public static final String CLASSNAME = "className"; public st

  • java web中使用cookie记住用户的账号和密码

    毕业设计中需要用到记住账号密码的功能,网上搜到了一个解决方案,自己稍加改造就是下面的方法. 首先是登录的页面,当用户勾选记住密码,传递给controller(我用的SSM框架),后台设置cookie的值,然后下次登录的时候就不用再次输入账号和密码了. login.jsp的代码: <%@page import="org.apache.commons.lang.StringUtils"%> <%@ page language="java" conten

  • Android 中Crash时如何获取异常信息详解及实例

    Android 中Crash时如何获取异常信息详解 前言: 大家都知道,Android应用不可避免的会发生crash,无论你的程序写的多完美,总是无法完全避免crash的发生,可能是由于Android系统底层的bug,也可能是由于不充分的机型适配或者是糟糕的网络状况.当crash发生时,系统会kill掉你的程序,表现就是闪退或者程序已停止运行,这对用户来说是很不友好的,也是开发者所不愿意看到的,更糟糕的是,当用户发生了crash,开发者却无法得知程序为何crash,即便你想去解决这个crash,

  • Android 登录页面的实现代码(密码显示隐藏、EditText 图标切换、限制输入长度)

    效果演示 密码显示与隐藏 方法一 if(status){ etPassword.setInputType(InputType.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_NORMAL); //显示文本 status = false; }else { etPassword.setInputType(InputType.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD); //隐藏

  • Web网络安全解析cookie注入攻击原理

    目录 cookie注入攻击 cookie注入代码分析 cookie注入攻击 cookie注入攻击的测试地址:http://127.0.0.1/sqli/cookie.php. 发现URL中没有GET参数,但是页面返回正常,使用Burp Suite抓取数据包,发现cookie中存在id=1的参数,如图56所示. 图56 cookie数据 修改cookie中的id=1为id=1',然后再次访问该URL,发现页面返回错误.接下来,分别修改cookie中id=1 and 1=1和id=1 and 1=2

  • 如何决定是否将登录内容保存到Cookie里?

    login.htm <% @ Language=&#106avascript %><%if (Request.Cookies("SavedLogin").HasKeys) {    Response.Redirect("checklogin.asp?Cookie=1")}%> <html><head> <title>精彩春风之登录页面</title> </head><b

  • 配置android开发环境时出现eclipse获取不到ADT的解决方法

    本文实例讲述了配置android开发环境时出现eclipse获取不到ADT的解决方法.分享给大家供大家参考,具体如下: 在安装完Android SDK后eclipse要获取ADT, 可是由于GFW的存在, eclipse经常无法从http://dl-ssl.google.com/android/eclipse 获取到任何东西. 下面提供解决方法: 以往安装ADT根本就不是个问题,可是现在就是个大问题了,联通的宽带网络连www.google.com.hk都打不开,你叫我们这些P民怎么活? 无论ht

随机推荐