【安卓笔记】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 ...
随机推荐
- java当中JDBC当中请给出一个sql server的helloworld例子
[学习笔记] 1.sql server的helloworld例子: import java.sql.*; public class JdbcHelloSqlServer { public stati ...
- pip install 遇到的问题
执行pip命令时遇到 Fatal error in launcher: Unable to create process using '"' 电脑同时安装了python-2.7.13跟p ...
- python 之 数据库(修改表、复制表、删除表、单表查询)
10.8 修改表.复制表.删除表 10.81 修改表 alter table . 修改表名 alter table 表名 rename 新表名; . 增加字段 alter table 表名 add 字 ...
- golang日志库之glog使用问题总结
1. 日志默认输出路径为临时路径,可通过执行命令时带上 -log_dir="路径",指定输出,但路径必须已存在,源码如下,日志文件会生成两个 .INFO等后缀是符号链接文件,另一个 ...
- 创建 Python Virtualenv 虚拟隔离环境
video:创建 Python Virtualenv 虚拟隔离环境 python 虚拟环境 venv 简单用法 - littlemore - 博客园 创建 Python Virtualenv 虚拟隔离 ...
- Educational Codeforces Round 65 (Div. 2)
A.前n-10个有8即合法. #include<cstdio> #include<cstring> #include<iostream> #include<a ...
- Git config 使用说明(转)
原文:https://blog.csdn.net/gdutxiaoxu/article/details/79253737
- flutter从入门到精通三
flutter可以通过一套代码运行在多个平台上,包括移动,web,桌面,嵌入式,但是在 Web 平台的支持尚未达到 Beta 阶段,请不要用在生产环节,在阅读文档时候,推荐大家阅读https://fl ...
- axios 发 post 请求,后端接收不到参数的解决方案(转载)
原文地址:https://www.cnblogs.com/yiyi17/p/9409249.html 问题场景 场景很简单,就是一个正常 axios post 请求: axios({ headers: ...
- mac os安装mtr
MTR是Linux平台上一款非常好用的网络诊断工具,集成了traceroute.ping.nslookup的功能,用于诊断网络状态非常有用 现使用的方法是下载pkg包手动安装 mtr的pkg下载地址 ...