您的位置:首页 > 移动开发 > Android开发

android获取web服务器端session并验证登陆 二

2013-02-05 17:03 387 查看
接上文:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: