我们进行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. Card objects

    There are fifty-two cards in a deck, each of which belongs to one of four suits and one of thirteen ...

  2. 学习练习 java 线程

    package com.hanqi.xc; import java.util.*; public class lianxi extends Thread { public void run() { c ...

  3. C# 特性 Attribute

    特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属性.方法等具有某些统一的特征,从而达到某些特殊的需要.举个小栗子:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作.文件 ...

  4. 浅谈C++虚函数

    很长时间都没写过博客了,主要是还没有养成思考总结的习惯,今天来一发. 我是重度拖延症患者,本来这篇总结应该是早就应该写下来的. 一.虚函数表 C++虚函数的机制想必大家都清楚了.不清楚的同学请参看各种 ...

  5. AnyCAD C++ SDK与OpenCASCADE互操作

    AnyCAD SDK有.Net和C++两个版本,使用C++版本的AnyPlatformOcc模块可以实现与OpenCASCADE互操作. C++版本(VS2010 32bit)下载 在AOBridge ...

  6. 软件工程 speedsnail 冲刺8

    完成任务:蜗牛移动的界面调整,速度调整: 遇到问题: 问题1 进入关卡的开始蜗牛会跳一段距离 解决1 线程延迟3S: 明日任务: 划线实现挡板功能

  7. Objective-C特点

    1.兼容性 OC是一种面向对象的C语言,在OC的代码中可以有C和C++语句,它可以调用C函数,也可以通过C++对象访问方法. 2.字符串 OC通常不使用C语言风格的字符串.大多数情况下(CoreFou ...

  8. css3 文本效果

    CSS3 文本效果   1 CSS3 文本阴影在 CSS3 中,text-shadow 可向文本应用阴影,能够规定水平阴影.垂直阴影.模糊距离,以及阴影的颜色.text-shadow: 5px 5px ...

  9. nodejs服务器anywhere简介

    一句话:随时随地将你的当前目录变成一个静态文件服务器的根目录. 安装 npm install anywhere -g 执行 $ anywhere // or with port $ anywhere ...

  10. 巩固一下C语言中的指针

    今天无意间看到一篇文章<[C语言] 浅谈指针>,对C语言指针的总结很好! 文章地址:http://blog.csdn.net/wbq1480/article/details/5150612 ...