移动客户端与服务端Session那点秘密
众所周知,做过Web开发的小伙伴可能知道,在浏览器向服务器发一个请求,服务器端会为当前的访问者创建一个session会话,随着浏览器的关闭而会话结束。但是移动客户端咋整呢(IOS/Android啥的)。鄙人研究了一番,发现IOS/Android用原生接口发请求最大滴特点是每一次建一个会话,这样登录功能也就基本废了。登录功能的意义是将用户身份验证成功的信息存储在session里,结果每一次请求一个新的session这可不OK啊。
那么如何保证客户端的登录时创建的session在后续的接口请求中都能够行之有效的为客户端提供会话的操作,比如用户信息实体的存放,用户权限功能菜单的存放啥的。首先来科普一个概念:Cookies,不懂的自己百度,还有一个比较流行的移动端开发概念access_token,做过微信开发的应该都懂,不懂自己百度。
浏览器的工作原理也是基于cookies,这也就能解释每一次为何清空cookie后网站需要重新登录。浏览器访问服务端时,服务端在响应信息里包含了cookie信息,这个cookie里就有sessionId,这个sessionId会被浏览器自己缓存在本地cookie里,后续访问该网站的一切请求时都会自动在HTTP请求头Header里带着cookie信息。因此,服务器通过cookie里的sessionId来判断当前访问者的身份,并且从会话集合里匹配当前sessionId所对应的会话对象。
再说说另外一个概念access_token令牌,这个是自己约定的,根据开发需要。比如有这样的一个场景:用户登录请求,用户登录时,会带着用户名name和密码pwd来访问登录接口。如果服务端确认该用户是合法的,那么咱们应该由服务端生成一个access_token,保存在服务端的session会话里,并且将这个access_token返回给客户端。
OK,到这里,客户端总共获取到了两个东西,包含有sessionId的cookie和access_token,有了这两个东西,客户端后续在请求服务端的任何一个接口时,需带着access_token和Cookie即可。服务端会通过cookie识别你属于哪个session,通过access_token判断你是否合法,此次登录是否过期(服务端说了算)。上代码:
//////////////////////////////////////////////////////////
//一.登录时创建会话且返回access_token到客户端
///////////////////////////////////////////////////////// //access_token令牌作为登录状态标识
HttpServletRequest req = Mvcs.getReq();
HttpSession session = req.getSession(true);//创建会话
//uuid作为token
String access_token = UUID.randomUUID().toString();
session.setAttribute("access_token", access_token);
//out.print("access_token:"+access_token); //////////////////////////////////////////////////////////
//二.后续的接口访问中服务端过滤链逻辑
/////////////////////////////////////////////////////////
HttpServletRequest request = Mvcs.getReq();
HttpSession httpSession = request.getSession(true);
String rat= request.getParameter("access_token");
String sat= (String)httpSession.getAttribute("access_token");
if(rat!= null && rat.equals(sat)) {
//如果相等,说明access_token是有效的.
//放行。。。
}
备注:只要你在HTTP请求头里提交了形如:Cookie:JSESSIONID=16E11471753944CF4F68A9F665E9B97F 键值对,服务器会自动根据cookie里包含的sessionId去在服务端匹配属于这个id的session并提供服务。
移动客户端与服务端Session那点秘密的更多相关文章
- 客户端session与服务端session
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 转:客户端session与服务端session
会话(Session)跟踪是Web程序中常用的技术,用来 跟踪用户的整个会话 .常用的会话跟踪技术是Cookie与Session. Cookie通过在客户端记录信息确定用户身份 , Session通过 ...
- Flask基础(11)-->http的无状态协议解决办法二(服务端session)
session的交互流程 Session 对于敏感.重要的信息,建议存在服务器端,不能存储在浏览器中,比如用户名,密码,余额,验证码等信息 在服务器端进行状态保持的方案就是Session Sessio ...
- 少部分手机浏览器对于COOKIE支持不够导致服务端无法读取session的解决方案
相信大家都遇到过这样的问题,有手机浏览器的问题导致服务端SESSION读取不正常,目前在项目中的解决方法是采取H5手机本地存储唯一KEY解决的 代码片段 //定义json格式字符串 var userD ...
- Android 解决服务端验证码问题
服务端验证码解决方法. 在服务端生成验证码后会把验证码字符串存在服务端的session中,等待用户提交进行比对.为了保证服务器与客户端的一对一的关系,所以出现了session 和cookie技术.客户 ...
- java访问webservce,保持会话,服务端保存session验证
在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...
- 转-Android客户端和服务端如何使用Token和Session
http://www.software8.co/wzjs/yidongkaifa/6407.html 对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不 ...
- restsharp发送服务端请求回传session
今天工作遇到这样一个场景,我需要获取一个游戏目录列表,这个列表接口在线上已经存在,但是这个接口需要登录认证后才能获取到,所以实现这个功能我打算分两部来做: 1.首先调登录接口,以写上session 2 ...
- aJax提交——服务端不能用request存储数据,session存数据客户端可以接收到
aJax提交与普通提交是两种迥异的提交方式,这两种提交方式决定了客户端与服务端交互时存储.传输数据的方式也不同. aJax提交,客户端的请求数据存储在data中,服务端用request.getPara ...
随机推荐
- HTML5 CSS3 精美案例 : 达到VCD盒个性幻灯片
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/31015121 哈,首先感谢下w3cfuns教师,行~ 行.这一次分享发夹CSS3 ...
- Eclipse SDK构建J2EE开发环境
鄙视官Java EE Developers 体积庞大的兄弟们可以提出自己的J2EE开发环境! 1.第一次去Eclipse官网下载Eclipse IDE 我使用的是:Eclipse IDE for Ja ...
- STL源代码分析 集装箱 stl_set.h
本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie set ------------------------------------------ ...
- css3 翻牌(rotate) 以及翻转 导致边缘锯齿解决 方法
主要知识点:rotate旋转以及 outline透明的像素消除(明显降低)火狐旋转是产生的 锯齿 首先看结构: <li class="flip-container " ...
- 深度解析:Android在Mms设置页面更改短信中心号码流程
相关控件初始化方法:showSmscPref private void showSmscPref() { int count = MSimTelephonyManager.getDef ...
- 3D空间中的AABB(轴向平行包围盒, Aixe align bounding box)的求法
引言 在前面的一篇文章中讲述了怎样通过模型的顶点来求的模型的包围球,而且还讲述了基本包围体除了包围球之外,还有AABB包围盒.在这一章,将讲述怎样依据模型的坐标求得它的AABB盒. 表示方法 AABB ...
- 中国澳门sinox很多平台CAD制图、PCB电路板、IC我知道了、HDL硬件描述语言叙述、电路仿真和设计软件,元素分析表
中国澳门sinox很多平台CAD制图.PCB电路板.IC我知道了.HDL硬件描述语言叙述.电路仿真和设计软件,元素分析表,可打开眼世界. 最近的研究sinox执行windows版protel,powe ...
- ASP.NET MVC应用程序展示RDLC报表
原文:ASP.NET MVC应用程序展示RDLC报表 学习ASP.NET MVC这样久,在学习,练习与应用过程中,觉得很多知识与以前的ASP.NET多有区别,但是实现操作起来,细处又有许多相近的地方. ...
- 在Jenkins中配置运行远程shell命令
用过Jenkins的都知道,在Build配置那里有一个Add buld step, 有这样两个选项: 1. Execute Windows batch command 2. Execute shell ...
- SQL Server使用规范
原文:SQL Server使用规范 常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数据类型 ...