接上文:
2.)服务器端(php)php服务器端主要有三个文件,conn.php,login.php和getinfo.php。
1. conn.php是连接数据库的配置文件。
2. login.php主要是用来验证android客户端发送的请求,请求成功则返回flag=’success’的状态标识,采用数组记录用户基本信息,存储用户数据到session,并且记录本次产生的session id。用户基本数据及本次session产生的id均封装成json格式(json_encode($arr)),发送android客户端。产生本次session id的方法
$sessionid=session_id();//注意没有参数
- <?php
- header("Content-Type: text/html; charset=utf-8") ;
- //包含数据库连接文件
- include('conn.php');
- session_start();
- $username = htmlspecialchars($_POST["username"]);
- $password=$_POST["password"];
- mysql_query("set names utf8");
- //检测用户名及密码是否正确
- $check_query = mysql_query("select id ,name from user where name='$username' and
- password='$password' limit 1");
- $arr=array();//空的数组,该数组主要是格式化数据并封装成json格式发送到客户端
- if($result = mysql_fetch_array($check_query)){
- //登录成功
- $_SESSION['username'] = $result['name'];
- $_SESSION['userid'] = $result['id'];
- //获取当前session id
- $sessionid=session_id();
- $_SESSION['$sessionid'] = $sessionid;
- $arr = array(
- 'flag'=>'success',
- 'name'=>$result['name'],
- 'userid'=>$result['id'],
- 'sessionid'=>$sessionid
- );
- //封装json,如果php版本低于5.2,则不支持json_encode()方法,
- //可以参考本文件夹中php_json_encode.php中php_json_encode()方法代替json_encode();
- echo json_encode($arr);
- } else {
- $arr = array(
- 'flag'=>'error',
- 'name'=>'',
- 'userid'=>'',
- 'sessionid'=>''
- ); //封装json,如果php版本低于5.2,则不支持json_encode()方法,
- //可以参考本文件夹中php_json_encode.php中php_json_encode()方法代替json_encode();
- echo json_encode($arr);
- }
- ?>
3. getinfo.php文件主要是用户再次查询信息验证session,而不是重新产生session,以记录用户状态。通过验证flag是否为empty判断数据是否显示。最后封装成json发送到客户端
获取本次session的方法:
$sessionid=$_POST["sess_sessionid"];//获取android客户端的sessionid
session_id($sessionid);//有参数
session_start();//启动session
- <?php
- header("Content-Type: text/html; charset=utf-8") ;
- include('conn.php');
- //获取从客户端LoginSuccessActivity类传递的参数
- $userid=$_POST["sess_userid"];
- $username=$_POST["sess_username"];
- //获取客户端传递的session标识
- $sessionid=$_POST["sess_sessionid"];
- session_id($sessionid);
- //将会根据session id获得原来的session
- session_start();
- //获取服务器端原来session记录的username,并且根据客户端传过来的username比较进行验证操作
- $sess_username=$_SESSION['username'];
- if($username==$sess_username){
- mysql_query("set names utf8");
- //查询用户基本信息
- $check_query = mysql_query("select userinfo,level from info where userid='$userid' limit 1");
- $arr=array();//空的数组
- if($result = mysql_fetch_array($check_query)){
- $arr = array(
- 'flag'=>'notempty',
- 'info'=>$result['userinfo'],
- 'level'=>$result['level'],
- 'sessionid'=>$sessionid
- );
- echo json_encode($arr);
- }
- } else {
- $arr = array(
- 'flag'=>'empty',
- 'name'=>'',
- 'userid'=>'',
- 'sessionid'=>$sessionid
- );
- echo json_encode($arr);
- }
- ?>
3.)数据库端(mysql)采用mysql建立数据库,建立两个简单的数据表:user和info。
- /*
- MySQL Data Transfer
- Source Host: localhost
- Source Database: login
- Target Host: localhost
- Target Database: login
- Date: 2011-6-14 11:10:46
- */
- SET FOREIGN_KEY_CHECKS=0;
- -- ----------------------------
- -- Table structure for info
- -- ----------------------------
- CREATE TABLE `info` (
- `id` int(12) NOT NULL AUTO_INCREMENT,
- `userid` int(12) DEFAULT NULL,
- `userinfo` varchar(100) DEFAULT NULL,
- `level` int(2) DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `useid` (`userid`),
- CONSTRAINT `useid` FOREIGN KEY (`userid`) REFERENCES `user` (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Table structure for user
- -- ----------------------------
- CREATE TABLE `user` (
- `id` int(12) NOT NULL AUTO_INCREMENT,
- `name` varchar(20) DEFAULT NULL,
- `password` varchar(20) DEFAULT NULL,
- `status` int(2) DEFAULT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Records
- -- ----------------------------
- INSERT INTO `info` VALUES ('1', '1', 'charlie is a developer.', '1');
- INSERT INTO `info` VALUES ('2', '2', 'william is a boss.', '20');
- INSERT INTO `user` VALUES ('1', 'charlie', 'password', '1');
- INSERT INTO `user` VALUES ('2', 'william', 'mypassword', '2');
运行效果如图:
图 -1 GetWebSession.java类的布局
图 -2 LoginSuccessActivity.java类获取的session id以及用户基本信息
图 -3 GetWebSession.java获取用户详细信息及本次session的一致性
源码下载: GetWebSession.zip (71.44 KB, 下载次数: 62)
原文:http://blog.csdn.net/t80t90s/article/details/7959928