【安卓笔记】Android保持Session
简介:
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的更多相关文章
- Android Studio安卓学习笔记(一)安卓与Android Studio运行第一个项目
一:什么是安卓 1.Android是一种基于Linux的自由及开放源代码的操作系统. 2.Android操作系统最初由AndyRubin开发,主要支持手机. 3.Android一词的本义指“机器人”, ...
- [转]【安卓笔记】AsyncTask源码剖析
[转][安卓笔记]AsyncTask源码剖析 http://blog.csdn.net/chdjj/article/details/39122547 前言: 初学AsyncTask时,就想研究下它的实 ...
- Xamrin开发安卓笔记(三)
http://www.cnblogs.com/minCS/p/4118170.html Xamrin开发安卓笔记(三) 安装片 Xamrin开发安卓笔记(一) Xamrin开发安卓笔记(二) 这次 ...
- Xamrin开发安卓笔记(二)
http://www.cnblogs.com/minCS/p/4112617.html Xamrin开发安卓笔记(二) 安装篇 Xamrin开发安卓笔记(一) 昨天调理一天AAPT.EXE 被推出 ...
- Xamrin开发安卓笔记(一)
http://www.cnblogs.com/minCS/p/4108133.html Xamrin开发安卓笔记(一) 安装篇 环境虽然搭建的不稳定,不过还是可以开发的,又加了两个环境变量不知道有 ...
- Mina框架的学习笔记——Android客户端的实现
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...
- Android动画学习笔记-Android Animation
Android动画学习笔记-Android Animation 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...
- Android笔记——Android中数据的存储方式(二)
我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...
- 仿春雨医生 安卓app(android)
仿春雨医生 安卓app(android) 目前APP处与开发完善中,可过程序自下载更新,如有BUG报错,请联系QQ 131 065 1206 支持安卓(android) .IOS(IPHONE),PA ...
随机推荐
- Python3之字符串格式化format函数详解(下)
格式限定符 format通过丰富的的“格式限定符”(语法是 {}中带:号)对需要格式的内容完成更加详细的制定. 进制转换 我们可以再限定符中制定不同的字符对数字进行进制转换的格式化,进制对应的表格: ...
- scrapy框架3——请求传参
当使用scrapy爬取的数据不在同一张页面中(一次请求与数据后解析无法获得想要的全部数据),需要请求传参,在第一次解析时实例化item,将item传递,再次将请求到的数据解析后,封装在item中. 关 ...
- Python-03-流程控制
一.if判断语句 1. if...else if 条件: 满足条件时要做的事情1 满足条件时要做的事情2 ...... else: 不满足条件时要做的事情1 不满足条件时要做的事情2 ...... # ...
- 利用Python进行数据分析 第8章 数据规整:聚合、合并和重塑.md
学习时间:2019/11/03 周日晚上23点半开始,计划1110学完 学习目标:Page218-249,共32页:目标6天学完(按每页20min.每天1小时/每天3页,需10天) 实际反馈:实际XX ...
- 文件类型分类:头文件dirent.h中定义的文件类型与linux内文件符号对应关系
头文件 dirent.h 定义了文件类型: enum{ DT_UNKNOWN = 0, //未知类型 DT_FIFO = 1, //first in, ...
- python数据统计出海品牌
当国内市场处于红海之中时,市场全球化已成为大势所趋.越来越多的国产品牌远走高飞,纷纷将品牌拿出来. 2019年,中国品牌十大品牌中,华为品牌力指数同比增长22%,阿里巴巴品牌力指数增长48%,小米品牌 ...
- Java 之 InputStreamReader 类
InputStream 类 1.概述 转换流 java.io.InputStreamReader ,是Reader的子类,是从字节流到字符流的桥梁. 该类读取字节,并使用指定的字符集将其解码为字符. ...
- fastjson反序列化漏洞研究(上)
前言 最近护网期间,又听说fastjson传出“0day”,但网上并没有预警,在github上fastjson库中也有人提问关于fastjson反序列化漏洞的详情.也有人说是可能出现了新的绕过方式.不 ...
- git推送代码Gogs报401错误
1.git push 报错:RPC failed; HTTP 401 curl 22 The requested URL returned error: 401 The remote end hung ...
- code first从入门到伪精通
新入职一家公司,虽然之前也用ef,但是方式不一样,之前用的db,现在用代码先行的code,基于现有公司基本项目框架都是用的code,所以一步登顶,从最实战的角度去操作code,心颤的很,废话不多说,开 ...