android,ios客户端与服务器通信
为了便于理解,直接用PHP作为服务器端语言

其实就是一个 http请求响应的过程序,
先从 B/S模式说起
浏览器发起http请求,服务器响应请求,并把数据返回给浏览器,经过浏览器的渲染,即为我们所看到的效果

客户端(android,ios)
android通过 httpClient或urlconnection等网络请求去实现http请求,(相当于浏览器,发送 url请求),即访问服务器,
服务器响应请求,并把结果返回给客户端,经过客户端渲染,即为我们看到的效果.

ios通过 NSURLRequest,NSURLConnection,AFNetworking等网络请求去实现 http请求,(相当于浏览器,发送 url请求),
即访问服务器,服务器响应请求,并把结果返回给客户端,经过客户端渲染,即为我们看到的效果.

以上客户端请求过程中,客户端开发与服务器开发制定一种规则,例如:服务器说,我把响应的数据格式为 json或xml,
让你们客户端自己去渲染样式,就这样完成了基本的请求.

再从保持会话状态来说:
先从 B/S模式说起
浏览器请求服务器时,会把 cookie(浏览器没有禁止情况下)的相关信息通过 header发送到服务器,这个是浏览器访问
服务器时,默认把这个信息发过到服务器的,所以在php服务器端可以直接用 $_COOKIE来提取信息。
这里又说一下 cookie,session之间保持会话的原理。

当第一次访问一个网站时(假如之前没有访问过,或者清除干净相关 cookie),服务器会自动生成一个 session会话,
并保存在服务器,会话的相关信息有 session_name(),session_id(),
(假设用默认的session机制,即 session_name() == PHPSESSID),
然后把 session_name(), session_id(),返回给浏览器,并保存在 cookie中,其中,session_name()的值(即PHPSESSID)
作为 cookie的名称,session_id()的值作为 cookie的值,此时就建立了浏览器和服务器的会话标识.当浏览器再次请求时,
就会把cookie相关信息发送到 服务器端中,服务器通过获取cookie信息,对比session相关信息,如果对应的,就说明是同
一个标识请求,这样就建立了会话标识状态.

再从客户端(android,ios)
其实就是模拟 cookie与 session的机制
因为客户端没有 cookie这种东西(有也可以不用,即这里当作没有),每次请求时,服务器可以生成 session,但是无法以
cookie的方式保存在客户端,困惑就在这里?假设用户初次安装,或者清空过相关信息。可以这样和客户端设定规则,
就是设置一个标识,这里,我们叫 token,客户端首次访问时,传递过来的 token为空,服务器接收客户端发起的请求后,
发现token为空,所以就在服务器生成一个唯一的 token,并保存在服务器端(可以选择保存在数据库,memcached,redis等),
接着把响应的内容返回给客户端,同时把 token也一起传递过去,客户端收到 token以后,就可以更新 token值,当客户端
再次请求时,也把 token传递过来,服务器接受请求,并解析 token,与服务器的对比,如果存在,则更新token生存时间,
并认为是同一个用户请求,就这样,建立了一个会话标识。相当于cookie与session对比一样。至于token在客户端是如何保存
的,其实客户端有自己的机制,比如说,客户端可以生成一个文件,然后把token值保存在里面,每次请求时,就读取一下这个
文件,并取值去请求服务器,就这样建立连接了.

以上说得比较笼统。就如是cookie一样,token会有生命周期。那么如何才能像cookie一样设置token生效周期呢。其实原理是
一样的,就是当客户端请求服务器时,每次都更新服务器token的效期。服务器返回给客户端时,客户端也每次更新
token有效期,就这样保持 token的有效期.

以下模拟一个客户商购物的流程,把 token,用户id(userId)放在数据库(单独的一个表,如:token_table)中,
同时把购物车产品也放在数据库(另一个表中如:cart_table)中.允许用户没有登陆情况下,添加产品到购物车。
当用户添加产品到购物车时,把token传递过去,以后就用 token作为标识了,每次客户端请求时,
同时也把token传递给服务器,以判断是同一个用户。假如设置当用户提交订单时,则要登陆,此时,
检查token_table表,通过 token字段对比,如果 userId为空,则表示此用户没有登陆,此时返回信息给客户端,
通知用户登陆,接着用户登陆,通过传递的信息,如果登陆成功,则更新 token_table表的userId字段,表明登陆成功,
并返回成功状态给客户端,此时就建立了登陆状态,此时,如果涉及到在服务器中的订单提交,支付等信息,
一般都会用 userId作为标识,此时,就得用 token去查询 token_table表,从中取出 userId,就这样即可完成相关的操作.

客户端(android,ios)与服务器通信的更多相关文章

  1. SSM整合 完美支持RESTful(Jsp和客户端<android ios...>)

    一 RESTful简介 RESTful是一种网络应用程序的设计风格和开发方式 它结构清晰 符合标准 易于理解 扩展方便 REST 即Representational State Transfer的缩写 ...

  2. WebSocket 开发模拟客户端与有游戏服务器通信

    WebSocket 客户端测试功能 websocket是有标准的通信协议,在h2engine服务器引擎中继承了websocket通信协议,使用websocket通信协议的好处是很多语言或框架都内置了w ...

  3. Android客户端通过socket与服务器通信

    android端--Client package com.sec.chatroomandroid; import java.io.BufferedReader; import java.io.Buff ...

  4. Android与Mysql服务器通信

    需求:在手机端读取蓝牙传输过来的数据,然后发送到mysql 安卓前期版本可以直接使用mysql connector, 现在只能通过访问url传递数据了. 服务器端写php脚本,接受发送过来的url请求 ...

  5. 烂泥:openvpn双网卡客户端与内网机器通信

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 前段时间写了一篇有关openvpn搭建与内网机器通信的文章,那篇文章是基于服务器单网卡 ...

  6. Android BLE与终端通信(四)——实现服务器与客户端即时通讯功能

    Android BLE与终端通信(四)--实现服务器与客户端即时通讯功能 前面几篇一直在讲一些基础,其实说实话,蓝牙主要为多的还是一些概念性的东西,当你把概念都熟悉了之后,你会很简单的就可以实现一些逻 ...

  7. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  8. Android操作HTTP实现与服务器通信(转)

    Android操作HTTP实现与服务器通信   本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方 ...

  9. Android操作HTTP实现和服务器通信

    众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HT ...

随机推荐

  1. 【转】bt协议的详细分析

    转自:https://baoz.net/bt-protocol/ 一 BT系统的组成结构 1 普通的Web服务器:        例如Apache或IIS服务器 2 一个静态的种子文件:     即. ...

  2. 【11】在operator=中处理“自我赋值”

    1.自我赋值,看起来愚蠢,但是却合法.有些自我赋值一眼就可看出来.有些自我赋值是潜在的.比如:a[i] = a[j]; *px = *py; 甚至不同类型的指针,都指向同一个地址,也是自我赋值,这一类 ...

  3. careercup-中等难度 17.12

    17.12 设计一个算法,找出数组中两数之和为指定值的所有整数对. 解答 时间复杂度O(n)的解法 我们可以用一个哈希表或数组或bitmap(后两者要求数组中的整数非负)来保存sum-x的值, 这样我 ...

  4. .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二)

    .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二) .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (一) 上一篇主 ...

  5. 四、Socket之UDP异步传输文件-用控件显示文件传输进度

    上一篇文章三.Socket之UDP异步传输文件中,实现了多文件的传输和MD5校验,还显示了文件传输过程中的信息,在这一篇文章中,将介绍怎样实现传输文件的进度显示和实现选择保存文件路径. 首先,来实现一 ...

  6. Android,使用Intent或Bundle传递参数,跳转页面。

    (1)使用Intent跳转页面: 第一个activity:MainActivity.java中: Intent myIntent = new Intent(); myIntent.putExtra(& ...

  7. C++ (P70—P96)

    1 类的成员默认为私有模型 2 类的声明内不允许对数据成员进行初始化 3 类的成员函数,如果在类外定义,只需在函数类型之前加上inline就为内联函数了,如果在类内定义函数则该函数自动成为内联成员函数 ...

  8. iOS 对网络视频采集视频截图

    在播放网络视频是  经常可以看到播放按钮下面是该制品的某个截图 : 一般情况下  后台服务器是可以把视频截图一起返回给你 你直接拿到图片显示就可以了 但是当后台没有提供时  我们也可以根据视频地址 自 ...

  9. 关于Java中return和finally谁先执行.

    例子一: public class A { public static void main(String[] args) { System.out.print(tt()); } public stat ...

  10. 到目前为止,Linux下最完整的Samba服务器配置攻略

    关 于Samba,大家有没有这种感觉,弄了N久丫的死活不喘气儿.找来各种“哥”和“姐”,发现全是“详解…配置专题”,看了半天不知道别个在说什么,好不 容易找了个简单的教程,从头到尾跟着做,尼玛,浪费时 ...