開發移動app與服務器端session的狀態管理與交互

咱們進行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

  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.  
  9. $act = $_REQUEST['act'];
  10. $result = array('ok' => 'yes');
  11.  
  12. if($act == 'login'){
  13. $email = $_REQUEST['email'];
  14. $pwd = $_REQUEST['pwd'];
  15.  
  16. if($email == 'aa@qq.com' && $pwd == '123456'){
  17. $result['session_id'] = session_id();
  18. }else{
  19. $result['ok'] = 'no';
  20. }
  21. }elseif($act == 'uinfo'){
  22. $session_id = $_REQUEST['session_id'];
  23. if($session_id == session_id()){
  24. $result['username'] = 'Wudiweb';
  25. }else{
  26. $result['ok'] = 'no';
  27. }
  28. }
  29.  
  30. echo json_encode($result);
  31. exit;

注意,這只是一個簡單的用法,若是你認爲不夠完善,能夠在此基礎上進行擴展,例如加密session_id等。cookie

相關文章
相關標籤/搜索