简介:

Session的概念在Android开发中遇到概率还是比较少,之前遇到一个项目的登陆接口返回不是Token,而且自己需要和服务端保持是Session,虽然这种情景很少,但是有时候后端有这种要求就没有办法。

Android保持Session

现在Android开发基本都是用OkHttp了,这里介绍如何使用OkHttp实现Session保持。

开始之前先简介一下Cookie与Session的区别与联系:

1、Cookie储存在客户端,Session储存在服务器端,他们之间的概念相似,都是用于存储信息。

2、Session由SESSION_ID和相关键值对信息组成,SESSION_ID标识一个客户端。

2、Session是基于Cookie而实现的,把SESSION_ID通过Cookie储存在客户端。

3、每次请求时将SESSION_ID加入请求头中发送到服务端,从而匹配SESSION_ID所对应的Session信息

Http响应的Response Header中的Set-Cookie就是告诉客户端要设置cookie,cookie值是一个字符串,有特殊的格式:

一般的格式:Set-Cookie: <cookie-name>=<cookie-value>

更多格式参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie

一般我们使用浏览器的时候,cookie会自动存储起来,并在请求的时候自动加入到请求头中,所以网站中我们登陆了之后,刷新页面或者下次重新进入网站,依然能识别到我们的身份。

在移动端原生的开发环境中,大部分框架并不会自动把cookie保存起来,当然就不会把cookie自动加入到请求头中。

使用OkHttp取出Cookie并保存的示例代码:

 @Override
 public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
    Headers headers =response.headers(); //response为okhttp请求后的响应
    List<String> cookies = headers.values("Set-Cookie");
    if (cookies.size() > 0) {
        String session = cookies.get(0);

        // 保存cookie值,这里第一个Cookie就是SESSION_ID,根据实际情况调整
        sessionid = session.substring(0, session.indexOf(";"));
}        

使用OkHttp把SESSION_ID回传服务器示例代码:

OkHttpClient okHttpClient = mHttp;

Request.Builder request = new Request.Builder().url(url);

// 把SESSION_ID回传服务器
request.addHeader("cookie", sessionid);

Call call = okHttpClient.newCall(request.build());

Response response = call.execute();

【安卓笔记】Android保持Session的更多相关文章

  1. Android Studio安卓学习笔记(一)安卓与Android Studio运行第一个项目

    一:什么是安卓 1.Android是一种基于Linux的自由及开放源代码的操作系统. 2.Android操作系统最初由AndyRubin开发,主要支持手机. 3.Android一词的本义指“机器人”, ...

  2. [转]【安卓笔记】AsyncTask源码剖析

    [转][安卓笔记]AsyncTask源码剖析 http://blog.csdn.net/chdjj/article/details/39122547 前言: 初学AsyncTask时,就想研究下它的实 ...

  3. Xamrin开发安卓笔记(三)

    http://www.cnblogs.com/minCS/p/4118170.html Xamrin开发安卓笔记(三)   安装片 Xamrin开发安卓笔记(一) Xamrin开发安卓笔记(二) 这次 ...

  4. Xamrin开发安卓笔记(二)

    http://www.cnblogs.com/minCS/p/4112617.html Xamrin开发安卓笔记(二)   安装篇 Xamrin开发安卓笔记(一) 昨天调理一天AAPT.EXE 被推出 ...

  5. Xamrin开发安卓笔记(一)

    http://www.cnblogs.com/minCS/p/4108133.html Xamrin开发安卓笔记(一)   安装篇 环境虽然搭建的不稳定,不过还是可以开发的,又加了两个环境变量不知道有 ...

  6. Mina框架的学习笔记——Android客户端的实现

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...

  7. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  8. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  9. 仿春雨医生 安卓app(android)

    仿春雨医生 安卓app(android) 目前APP处与开发完善中,可过程序自下载更新,如有BUG报错,请联系QQ 131 065 1206 支持安卓(android) .IOS(IPHONE),PA ...

随机推荐

  1. Python04之数据类型

    Python的数据类型主要有四类:整型.浮点型.字符串类型.布尔类型 整型:所有整数都属于整型(长整型和整型)         如:-121,0,765,89,12306 浮点型:数字上有小数点的数 ...

  2. PAT(B) 1048 数字加密(Java)字符串

    题目链接:1048 数字加密 (20 point(s)) 题目描述 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运 ...

  3. RT1502移植LUA成功的总结

    1.由于LUA需要至少50K的RAM(经验值),所以stack和heap设置的尽量大,当前分别都设置为了64K.在文件rt1052_flexspi_scf.scf里面改动: #define Stack ...

  4. 《Java Web开发实战》——Java工程师必备干货教材

    一年一度毕业季,又到了简历.offer漫天飞,失望与希望并存的时节.在IT行业,高校毕业生求职时,面临的第一道门槛就是技能与经验的考验,但学校往往更注重学生的理论知识,忽略了对学生实践能力的培养,因而 ...

  5. Go语言学习笔记(8)——包和结构体

    包 —— 每个可执行的应用程序必须包含一个主函数,它是执行的入口点.主函数应该存在main包中. 结构体: 通过 . 操作符访问结构体的各个成员! 1. 定义结构体类型person: type per ...

  6. nfs挂载文件

    1. 安装必备插件  以防centos7默认没有启动nfs服务 yum -y install nfs-utils rpcbind # 启动 rpcbind 和配置开机自启动 systemctl sta ...

  7. 模拟费用流 & 可撤销贪心

    1. CF730I Olympiad in Programming and Sports 大意: $n$个人, 第$i$个人编程能力$a_i$, 运动能力$b_i$, 要选出$p$个组成编程队, $s ...

  8. 启动 kibana 失败

    错误信息: Sending Logstash logs to /usr/local/logstash-6.4.3/logs which is now configured via log4j2.pro ...

  9. vmware vSphere Data Protection 6.1 --------1-部署

    一.简介 1.vdp的介绍 介绍可以参考:vmware vSphere Data Protection简述(未完成) 官方中文文档:https://docs.vmware.com/cn/VMware- ...

  10. C++ 去掉字符串的首尾空格和全部空格

    #include <iostream>#include <string>using namespace std; //去掉收尾空格string& ClearHeadTa ...