咱們進行web開發的時候,通常使用cookie或session來保存用戶的登陸狀態,經過檢查cookie或session的數據來驗證用戶是否具備對某些須要登陸的頁面的訪問權限,這一切都是經過瀏覽器來完成,這是b/s架構,可是,假如客戶端是移動應用端,那該怎麼辦?由於這是c/s架構,沒法使用使用cookie或session來檢驗用戶的狀態,此時的狀況就好像瀏覽器禁用了cookie。php
慶幸的是,這是有解決方法的,在禁用cookie的狀況下,能夠經過query_string來傳遞session_id,即在app發送登陸請求後,服務器端能夠經過傳遞session_id到app,而後app保存session_id在移動設備上,在那些須要登陸訪問權限的功能,每一次交互請求附帶參數session_id,傳送到服務器端,再由服務器端檢查session_id的合法性來肯定該用戶是否已登陸。html
如下是一個簡單的移動開發示例,並無使用原生的,而是使用appcan來構建app:web
1. app登陸請求:json
- var url = 'http://127.0.0.1:8080/index.php?act=login&email=aa@qq.com&pwd=123456';
- $.getJSON(url,function(res){
- if(res.ok == 'yes'){
- var storage = window.localStorage;
- if(storage) storage.setItem('sid',res.session_id);
- }else{
- uexWindow.toast(0, 5, '登陸失敗!', 4000);
- return;
- }
- }, 'json',null, 'POST', '', '');
2. app請求用戶信息:瀏覽器
- var sid = '';
- var storage = window.localStorage;
- if(storage) sid = storage.getItem('sid');
- var url = 'http://127.0.0.1:8080/index.php?act=uinfo&session_id='+sid;
- $.getJSON(url,function(res){
- if(res.ok == 'yes'){
- var uname = res.username;
- uexWindow.toast(0, 5, '用戶名:'+uname, 4000);
- return;
- }else{
- uexWindow.toast(0, 5, '請先登陸!', 4000);
- return;
- }
- }, 'json',null, 'POST', '', '');
3. 服務器端php響應請求[index.php]:服務器
- <?php
- /**
- * User: wudiweb.com
- * app與服務器端簡單示例
- */
- header("Content-Type: text/html; charset='utf-8'");
- session_start();
-
- $act = $_REQUEST['act'];
- $result = array('ok' => 'yes');
-
- if($act == 'login'){
- $email = $_REQUEST['email'];
- $pwd = $_REQUEST['pwd'];
-
- if($email == 'aa@qq.com' && $pwd == '123456'){
- $result['session_id'] = session_id();
- }else{
- $result['ok'] = 'no';
- }
- }elseif($act == 'uinfo'){
- $session_id = $_REQUEST['session_id'];
- if($session_id == session_id()){
- $result['username'] = 'Wudiweb';
- }else{
- $result['ok'] = 'no';
- }
- }
-
- echo json_encode($result);
- exit;
注意,這只是一個簡單的用法,若是你認爲不夠完善,能夠在此基礎上進行擴展,例如加密session_id等。cookie