我们进行web开发的时候,一般使用cookie或session来保存用户的登录状态,通过检查cookie或session的数据来验证用户是否具有对某些需要登录的页面的访问权限,这一切都是通过浏览器来完成,这是b/s架构,但是,假如客户端是移动应用端,那该怎么办?因为这是c/s架构,无法使用使用cookie或session来检验用户的状态,此时的情况就好像浏览器禁用了cookie。

庆幸的是,这是有解决方法的,在禁用cookie的情况下,可以通过query_string来传递session_id,即在app发送登录请求后,服务器端可以通过传递session_id到app,然后app保存session_id在移动设备上,在那些需要登录访问权限的功能,每一次交互请求附带参数session_id,传送到服务器端,再由服务器端检查session_id的合法性来确定该用户是否已登录。

以下是一个简单的移动开发示例,并没有使用原生的,而是使用appcan来构建app:

1. app登录请求:

  1. var url = 'http://127.0.0.1:8080/index.php?act=login&email=aa@qq.com&pwd=123456';
  2. $.getJSON(url,function(res){
  3. if(res.ok == 'yes'){
  4. var storage = window.localStorage;
  5. if(storage) storage.setItem('sid',res.session_id);
  6. }else{
  7. uexWindow.toast(0, 5, '登录失败!', 4000);
  8. return;
  9. }
  10. }, 'json',null, 'POST', '', '');

2. app请求用户信息:

  1. var sid = '';
  2. var storage = window.localStorage;
  3. if(storage) sid = storage.getItem('sid');
  4. var url = 'http://127.0.0.1:8080/index.php?act=uinfo&session_id='+sid;
  5. $.getJSON(url,function(res){
  6. if(res.ok == 'yes'){
  7. var uname = res.username;
  8. uexWindow.toast(0, 5, '用户名:'+uname, 4000);
  9. return;
  10. }else{
  11. uexWindow.toast(0, 5, '请先登录!', 4000);
  12. return;
  13. }
  14. }, 'json',null, 'POST', '', '');

3. 服务器端php响应请求[index.php]:

  1. <?php
  2. /**
  3. * User: wudiweb.com
  4. * app与服务器端简单示例
  5. */
  6. header("Content-Type: text/html; charset='utf-8'");
  7. session_start();
  8. $act = $_REQUEST['act'];
  9. $result = array('ok' => 'yes');
  10. if($act == 'login'){
  11. $email = $_REQUEST['email'];
  12. $pwd = $_REQUEST['pwd'];
  13. if($email == 'aa@qq.com' && $pwd == '123456'){
  14. $result['session_id'] = session_id();
  15. }else{
  16. $result['ok'] = 'no';
  17. }
  18. }elseif($act == 'uinfo'){
  19. $session_id = $_REQUEST['session_id'];
  20. if($session_id == session_id()){
  21. $result['username'] = 'Wudiweb';
  22. }else{
  23. $result['ok'] = 'no';
  24. }
  25. }
  26. echo json_encode($result);
  27. exit;

注意,这只是一个简单的用法,如果你认为不够完善,可以在此基础上进行扩展,例如加密session_id等。

开发移动app与服务器端session的状态管理与交互的更多相关文章

  1. 简简单单的Vue3(插件开发,路由系统,状态管理)

    既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 插件 路由(vue-router) 状态管理模式(Vuex) 那在上篇文章,我们讲了, ...

  2. 小程序全局状态管理,在页面中获取globalData和使用globalSetData

    GitHub: https://github.com/WozHuang/mp-extend 主要目标 微信小程序官方没有提供类似vuex.redux全局状态管理的解决方案,但是在一个完整的项目中各组件 ...

  3. vuex 状态管理 通俗理解

    解释:集中响应式数据管理,一处修改多处使用,主要应用于大中型项目. 安装: 第一:index.js:(注册store仓库) npm install vuex -D // 下载vuex import V ...

  4. python 全栈开发,Day129(玩具开机提示语,为多个玩具发送点播,聊天界面,app录音,app与服务器端文件传输,简单的对话)

    一.玩具开机提示语 先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.2.zi ...

  5. 服务器端Session和客户端Session(和Cookie区别)2

    https://blog.csdn.net/java_faep/article/details/78082802 我们可以得出如下结论: 关闭浏览器,只会是浏览器端内存里的session cookie ...

  6. 服务器端Session和客户端Session(和Cookie区别)

    Session其实分为客户端Session和服务器端Session. 当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识.SessionID是一个由24个字符组 ...

  7. [原创]java WEB学习笔记31:会话与状态管理 session机制 概述(定义,session机制,session的声明周期,保存session的方式,Session的创建与删除)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. 使用Docker开发NodeJs APP

    英文版原文地址 这是两篇连载文章的第一篇,讲解了如何使用 Docker 替代 Vagrant 开发基于 Express 框架的NodeJs App的部分细节.不过,这次要增加点难度:我们要使用 con ...

  9. UWP开发:APP之间的数据交互(以微信为例)

    目录 说明 UWP应用唤醒方式 跟微信APP交互数据 APP之间交互数据的前提 说明 我们经常看到,在手机上不需要退到桌面,APP之间就可以相互切换,并且可以传递数据.比如我在使用知乎APP的时候,需 ...

随机推荐

  1. startup毕业论文

    今天起得相对比较晚,为的是一个没有目的面试,去了的结果.只是打击一下自己的自信心,走的时候,面试官冷冷的说了一句,你的面试到此结束,是的,我并没有很伤心,在门外等面试的时候,我就非常的后悔,今天是不该 ...

  2. 学习练习 使用Servlet实现用户注册功能

    package com.hanqi.www; import java.io.IOException; import javax.servlet.ServletException; import jav ...

  3. WebLogic集群案例分析

    WebLogic集群案例分析 2012年8月,某证券交易系统(采用Weblogic中间件),由于基金业务火爆,使系统压力太大,后台服务器频繁死机时,这时工程师们紧急调试系统及恢复操作,等完成这些操作花 ...

  4. PAT1075. PAT Judge

    //终于A了,不难却觉着坑多的的题,注意-1的处理,感觉我是受memset置0的束缚了,可以把初试成绩置-1.就不用debug怎么久,注意对于-1的处理,不然漏洞百出 #include<cstd ...

  5. Tomcat Connector三种运行模式

    BIO: 一个线程处理一个请求.缺点:并发量高时,线程数较多,浪费资源. Tomcat7或以下,在Linux系统中默认使用这种方式. NIO: 利用Java的异步IO处理,可以通过少量的线程处理大量的 ...

  6. tech

    流式计算框架storm.spark.genfire.esper(CEP)

  7. jquery.css 最简单的用法

      //判断验证码     if (pwd != "" && pwd != null) {         $("#TxtPwd").css(& ...

  8. openSUSE之SSH登录

    环境: 1:操作系统:openSUSE 2:SSH工具:Xshell 3:virtualbox 解决问题:Xshell通过ssh登录openSUSE进行操作. 1:virtualbox安装好openS ...

  9. HttpClient特性

    Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且 ...

  10. Python之路【第五篇】:面向对象及相关

    Python之路[第五篇]:面向对象及相关   面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否 ...