众所周知,做过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那点秘密的更多相关文章

  1. 客户端session与服务端session

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  2. 转:客户端session与服务端session

    会话(Session)跟踪是Web程序中常用的技术,用来 跟踪用户的整个会话 .常用的会话跟踪技术是Cookie与Session. Cookie通过在客户端记录信息确定用户身份 , Session通过 ...

  3. Flask基础(11)-->http的无状态协议解决办法二(服务端session)

    session的交互流程 Session 对于敏感.重要的信息,建议存在服务器端,不能存储在浏览器中,比如用户名,密码,余额,验证码等信息 在服务器端进行状态保持的方案就是Session Sessio ...

  4. 少部分手机浏览器对于COOKIE支持不够导致服务端无法读取session的解决方案

    相信大家都遇到过这样的问题,有手机浏览器的问题导致服务端SESSION读取不正常,目前在项目中的解决方法是采取H5手机本地存储唯一KEY解决的 代码片段 //定义json格式字符串 var userD ...

  5. Android 解决服务端验证码问题

    服务端验证码解决方法. 在服务端生成验证码后会把验证码字符串存在服务端的session中,等待用户提交进行比对.为了保证服务器与客户端的一对一的关系,所以出现了session 和cookie技术.客户 ...

  6. java访问webservce,保持会话,服务端保存session验证

    在进行程序开发的过程中,遇到一个问题,怎么保持会话. 因为一帮进行方法调用很少涉及到即时身份验证的. 例如: 1:客户端登录后服务端保存登录用户信息: 2:客户端持有验证通过key再次请求: 3:服务 ...

  7. 转-Android客户端和服务端如何使用Token和Session

    http://www.software8.co/wzjs/yidongkaifa/6407.html 对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不 ...

  8. restsharp发送服务端请求回传session

    今天工作遇到这样一个场景,我需要获取一个游戏目录列表,这个列表接口在线上已经存在,但是这个接口需要登录认证后才能获取到,所以实现这个功能我打算分两部来做: 1.首先调登录接口,以写上session 2 ...

  9. aJax提交——服务端不能用request存储数据,session存数据客户端可以接收到

    aJax提交与普通提交是两种迥异的提交方式,这两种提交方式决定了客户端与服务端交互时存储.传输数据的方式也不同. aJax提交,客户端的请求数据存储在data中,服务端用request.getPara ...

随机推荐

  1. 小谷的战斗Jquery(三)--水平和垂直菜单

    日薪的例子似乎有点低,今天做多.行,这种实现是一个简单的菜单,Web项目中,有两个共同的菜单:纵向和横向.说到从垂直,看原代码. html代码实现最主要的菜单与子菜单 <span style=& ...

  2. openstack临时存储后端

    声明: 本博客欢迎转发.但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! 眼下openstack提供了 ...

  3. hdoj 2121 Ice_cream’s world II 【没有最低树的根节点】

    称号:pid=2121" target="_blank">hdoj 2121 Ice_cream's world II 题意:题目是一道躶题,给n个点,m条边的有向 ...

  4. Linux下一个CD翻录 创CUE 压缩flac攻略

    于Windows我们通常使用较低EAC翻录压缩发生器CUE找工作的步骤,但在Linux在稍微有点麻烦.每一步,我们需要自己做.经过我的反复尝试寻找和总结了相当不错的方法,使用软件和步骤如下面的. 使用 ...

  5. PHP上传文件(学习)

    <?php if(isset($_FILES['upfile'])) { if (is_uploaded_file($_FILES['upfile']['tmp_name'])){ $upfil ...

  6. 于Unity3D调用安卓AlertDialog

    例如,下面的示例代码演示 package com.sample.sampletest; import android.app.AlertDialog; import android.content.D ...

  7. android工程实现换壁纸功能(转)

    最近工作要实现换壁纸小功能,将代码做成demo发出来 没有采用zip格式换肤,因为只是更换一张图片背景 1.将三张图放入drawable-hdpi,我放的是480*800的 2.用sharedPref ...

  8. 解决opengl计算顶点的法线问题

    因为需要的论文,最近开始学习OpenGL.由于刚入门的初学者有这么总会遇到很多问题,. 这些天,好不容易才OpenGL个问题弄明确了. 几点迷惑: 在网上百度.发现非常多求平面法向量的介绍以及程序.后 ...

  9. ZOJ1610_Count the Colors(段树/为段更新)

    解决报告 意甲冠军: 一定长度8000段染.寻求染色完成后,.. 思路: 区间问题用线段树.成段的更新区间.最后把全部的区间下压到叶子结点,统计叶子结点的颜色. #include <iostre ...

  10. HDU1068/POJ1466_Girls and Boys(二分图/最大独立集=N-最大匹配)

    解题报告 http://blog.csdn.net/juncoder/article/details/38160591 题目传送门(POJ) 题目传送门(HDU) 题意: 求满足条件的最大集合:集合内 ...