首页 > 网站 > Apache > 正文

appcan开发移动app与服务器端session的状态管理与交互

2024-08-27 18:22:35
字体:
来源:转载
供稿:网友

我们进行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.  
  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.     } //开源软件:Vevb.com 
  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. echo json_encode($result); 
  30. exit
  31. ?> 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表