做大创项目时的一些经验,为了今后不忘记所以就在这里记录一下实现的过程。
android端程序
LoginActivity
protected void postRequestWithHttpClient() {
new Thread(new Runnable(){
@Override
public void run(){
String Resultms = null;
String lines;
StringBuffer response = new StringBuffer("");
HttpURLConnection connection=null;
try{
URL url = new URL("http://192.168.56.101/app_login.php"); //服务器php文件的位置
String username = inputUsername.getText().toString();
String password = inputPassword.getText().toString();
//连接服务器
connection=(HttpURLConnection) url.openConnection();
//上传服务器内容
connection.setRequestMethod("POST");
connection.setConnectTimeout(8000);
connection.setDoInput(true);//允许输入
connection.setDoOutput(true);//允许输出
connection.setUseCaches(false);
connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
connection.connect();
DataOutputStream outStream = new DataOutputStream(connection.getOutputStream());
outStream.writeBytes("username="+ username+"&password="+password);
outStream.flush();
outStream.close();
//读取响应
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
//读数据
while ((lines = reader.readLine()) != null) {
lines = new String(lines.getBytes(), "utf-8");
response.append(lines);
}
Log.v("HelloWorldActivity", response.toString());
reader.close();
//去掉response的空白字符
Resultms=response.toString().trim();
// 将服务器返回的结果存放到Message中
Log.v("HelloWorldActivity",Resultms);
if(Resultms.equals("error"))
{
message.what = PASSD_FAIL;
handler.sendMessage(message);
}
if(Resultms.equals("success"))
{
message.what = SUCCESS;
handler.sendMessage(message);
}
// Log.v("HelloWorldActivity", response.toString());
if(Resultms.equals("empty"))
{
message.what = EMPTY_FAIL;
handler.sendMessage(message);
}
//不存在用户
// Log.v("HelloWorldActivity",String.valueOf(Resultms.equals("nouser")));
if(Resultms.equals("nouser"))
{
message.what = NO_USER;
handler.sendMessage(message);
}
}
catch (Exception e) {
e.printStackTrace();
Log.d("HelloWorldActivity",e.toString());
message.what=CANNOT_CONNECT;
handler.sendMessage(message);
}
finally {
if (connection != null) {
connection.disconnect();
}
}
}
}).start();
服务器端程序(php)
app_conn.php
<?php
$dbhost = ‘localhost’;
$dbuser = ‘root’; //我的用户名
$dbpass = ‘52jyh4869ms’; //我的密码
$dbname = ‘ordpress’; //我的MySQL库名
$cn = mysql_connect($dbhost,$dbuser,$dbpass) or die("connect error");
@mysql_select_db($dbname)or die("db error");
mysql_query("set names 'UTF-8'");
?>
” ” 双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。
‘ ‘ 单引号里面的不进行解释,直接输出。
app_login,php
<?php
error_reporting(E_ALL ^ E_NOTICE);
include("app_conn.php");
//接收从客户端过来的数据
if(isset($_REQUEST["username"]) && isset($_REQUEST["password"]))
{
//赋值
$username=str_replace(" ","",$_REQUEST["username"]);
//数据库查询
$sql="select * from wp_users where user_login= $username";
$query=mysql_query($sql);
$rs = mysql_fetch_array($query);
//赋值
$password=$_REQUEST["password"];
//如果有该用户名
if(is_array($rs)){
$pass_user=$rs['user_pass'];
//一个全局变量
global $wp_hasher;
//如果没有进程使用该变量则进行操作,防止有多个线程进行
if(empty($wp_hasher)){
//wordpressy原来自带了一个验证密码的方法
require_once('/usr/share/nginx/html/wordpress/wp-includes/class-phpass.php'); //这个地方一定不能分开写,昨天因为这里,耗了一个晚上!!
// wordpress中用户保存到数据库中的密码都经过加密,所以要有一个加密验证
$wp_hasher = new PasswordHash(8,TRUE);
}
$flag=$wp_hasher->CheckPassword($password,$pass_user);
if($flag){
echo "success";
}
else{
echo "error";
}
}
else{
echo "nouser";
}
}
else
{
echo "empty";
}
?>
下面一些坑真的让我很难受
- 在用readline()函数时,最后得到的结果会有一个空格符,弄了我好久,一直失败。经过同学的帮忙,才有成功了。通过java的黑科技,trim()。所以在进行密码或者字符串匹配的时候,要考虑一下,是否需要用trim()。该方法的作用是将空格等一些字符去掉。
- Wordpress 密码是加密的,要进行验证必须进行解密 关于wordpress 可以参考一下这篇博客
http://blog.csdn.net/chengfei112233/article/details/6939144/