当前位置: 首页 > 编程笔记 >

Android 登录Web 时对cookie 处理

易宣
2023-03-14
本文向大家介绍Android 登录Web 时对cookie 处理,包括了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)getApplicathtml" target="_blank">ionContext());
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 的管理,有需要的朋友可以参考下。

 类似资料:
  • 我只是尝试使用node为应用程序(django/react)复制一个基于python的登录脚本

  • 问题内容: 我想集成python Selenium和Requests模块以在网站上进行身份验证。 我正在使用以下代码: 问题是,即使我传递了从请求会话生成的cookie ,当我尝试访问浏览器时,登录身份验证仍然存在。 如何修改上面的代码以通过身份验证网页? 谁能帮我解决这个问题? 非常感谢您的帮助。 最好的祝福。 问题答案: 我终于发现了问题所在。在向库发出请求之前,我应该先传递浏览器的cooki

  • 原本的接口都是服务于 web 端的。登录接口在成功后,后台直接设置了 cookie ,不需要前端做额外的处理(如果是 token 的方式的话,前端需要保存 token 到 localstorage 中),后续的业务请求会自动携带 cookie 到后台,进行权限校验来返回数据。 现在用同一个接口在 flutter 上实现登录,但是登陆后,请问 flutter 该怎么处理这个 cookie 呀?因为后

  • 问题内容: 我想要做的是打开一个页面(例如youtube)并自动登录,就像我在浏览器中手动打开它一样。 据我了解,我必须使用cookie,问题是我不知道如何使用。 我尝试使用以下方法下载YouTube Cookie: 我得到的是: {'name':'VISITOR_INFO1_LIVE','value':'EDkAwwhbDKQ','path':'/','domain':'.youtube.com

  • 主要内容:注册登录,分析网页结构,编写完整程序在使用爬虫采集数据的规程中,我们会遇到许多不同类型的网站,比如一些网站需要用户登录后才允许查看相关内容,如果遇到这种类型的网站,又应该如何编写爬虫程序呢?Cookie 模拟登录技术成功地解决了此类问题。 Cookie 是一个记录了用户登录状态以及用户属性的加密字符串。当你第一次登陆网站时,服务端会在返回的 Response Headers 中添加 Cookie, 浏览器接收到响应信息后,会将 Co

  • 我是python新手,尝试使用xpath和请求登录并从这里提取一些数据,使用本教程中演示的方法。我的python脚本目前如下: 不幸的是post请求的文本返回显示... ...然后显示登录页面的HTML的其余部分。我试着添加了上面所示的headers行,仔细检查了我使用的登录细节是否正确,并且我很高兴CMSCsrfToken是正确的,但是登录不起作用。这方面的任何帮助都是非常感谢的,我已经搜索过了