传统网页实现用户登陆一般采用session或cookie记录用户基本信息又或者两者结合起来使用。android也可以采用session实现用户登陆验证并记录用户登陆状态时的基本信息,session是在服务器端的;而类似cookie的记录方式,则可以在客户端采用xml文件记录用户基本信息,重要数据则可以加密存放客户端。android实现的session登陆功能与网页请求不同的是,网页形式的一次成功的登陆请求后,再点击其他页面时,session一直是存在的,在一定时间内是有效的;而采用android客户端请求的一次成功登陆后,再次发送新的请求,则会产生新的session,而不是原来的。这就需要记录session的id号,并在整个请求过程中都记录并传递这个id号,才能保证session的一致性。

以获取php session为例,主要思路实现分为客户端与服务器端3个步骤。

附件:源码下载

 

1.)客户端(ANDROID)

建立一个名为GetWebSession的android项目,编写GetWebSession.java,LoginSuccessActivity.java,GetUserInfoActivity.java三个activity类。

  1. GetWebSession.java主要是实现布局界面以及发送用户名和密码到php服务器端验证,如果验证成功则跳转到LoginSuccessActivity.java类。GetWebSession.java主要涉及到与服务器端连接请求,对从服务器端返回的json数据(如用户id,session等)进行解析,并存入HashMap,传递到LoginSuccessActivity.java

代码如下:

[view plain](http://www.yoyong.com/archives/178#)[copy to clipboard](http://www.yoyong.com/archives/178#)[print](http://www.yoyong.com/archives/178#)[?](http://www.yoyong.com/archives/178#)
- <span class="keyword">package</span> com.login.main;

- <span class="keyword">import</span> java.io.IOException;

- <span class="keyword">import</span> java.io.UnsupportedEncodingException;

- <span class="keyword">import</span> java.util.ArrayList;

- <span class="keyword">import</span> java.util.HashMap;

- <span class="keyword">import</span> java.util.List;

- <span class="keyword">import</span> org.apache.http.HttpEntity;

- <span class="keyword">import</span> org.apache.http.HttpResponse;

- <span class="keyword">import</span> org.apache.http.client.ClientProtocolException;

- <span class="keyword">import</span> org.apache.http.client.entity.UrlEncodedFormEntity;

- <span class="keyword">import</span> org.apache.http.client.methods.HttpPost;

- <span class="keyword">import</span> org.apache.http.impl.client.DefaultHttpClient;

- <span class="keyword">import</span> org.apache.http.message.BasicNameValuePair;

- <span class="keyword">import</span> org.apache.http.protocol.HTTP;

- <span class="keyword">import</span> org.apache.http.util.EntityUtils;

- <span class="keyword">import</span> org.json.JSONException;

- <span class="keyword">import</span> org.json.JSONObject;

- <span class="keyword">import</span> android.app.Activity;

- <span class="keyword">import</span> android.content.Context;

- <span class="keyword">import</span> android.content.Intent;

- <span class="keyword">import</span> android.os.Bundle;

- <span class="keyword">import</span> android.view.View;

- <span class="keyword">import</span> android.view.View.OnClickListener;

- <span class="keyword">import</span> android.widget.Button;

- <span class="keyword">import</span> android.widget.EditText;

- <span class="keyword">import</span> android.widget.Toast;

- <span class="keyword">public</span> <span class="keyword">class</span> GetWebSession <span class="keyword">extends</span> Activity {

- <span class="comment">/** Called when the activity is first created. */</span>

- <span class="keyword">private</span> EditText user;

- <span class="keyword">private</span> EditText password;

- <span class="keyword">private</span> Button loginBtn;

- <span class="keyword">private</span> Button logoutBtn;

- <span class="comment">//主要是记录用户会话过程中的一些用户的基本信息</span>

- <span class="keyword">private</span> HashMap<String, String> session =<span class="keyword">new</span> HashMap<String, String>();

- <span class="annotation">@Override</span>

- <span class="keyword">public</span> <span class="keyword">void</span> onCreate(Bundle savedInstanceState) {

- <span class="keyword">super</span>.onCreate(savedInstanceState);

- setContentView(R.layout.main);

- user=(EditText)findViewById(R.id.user);

- password=(EditText)findViewById(R.id.password);

- loginBtn=(Button)findViewById(R.id.loginBtn);

- loginBtn.setOnClickListener(loginClick);

- logoutBtn=(Button)findViewById(R.id.logoutBtn);

- logoutBtn.setOnClickListener(logoutClick);

- }

- OnClickListener loginClick=<span class="keyword">new</span> OnClickListener() {

- <span class="annotation">@Override</span>

- <span class="keyword">public</span> <span class="keyword">void</span> onClick(View v) {

- <span class="comment">// TODO Auto-generated method stub</span>

- <span class="keyword">if</span>(checkUser()){

- Toast.makeText(v.getContext(), <span class="string">&#8220;用户登录成功!&#8221;</span>, Toast.LENGTH_SHORT).show();

- Context context = v.getContext();

- Intent intent = <span class="keyword">new</span> Intent(context,

- LoginSuccessActivity.<span class="keyword">class</span>);

- <span class="comment">//传递session参数,在用户登录成功后为session初始化赋值,即传递HashMap的值</span>

- Bundle map = <span class="keyword">new</span> Bundle();

- map.putSerializable(<span class="string">&#8220;sessionid&#8221;</span>, session);

- intent.putExtra(<span class="string">&#8220;session&#8221;</span>, map);

- context.startActivity(intent); <span class="comment">// 跳转到成功页面</span>

- }

- <span class="keyword">else</span>

- Toast.makeText(v.getContext(), <span class="string">&#8220;用户验证失败!&#8221;</span>, Toast.LENGTH_SHORT).show();

- }

- };

- OnClickListener logoutClick=<span class="keyword">new</span> OnClickListener() {

- <span class="annotation">@Override</span>

- <span class="keyword">public</span> <span class="keyword">void</span> onClick(View v) {

- <span class="comment">// TODO Auto-generated method stub</span>

- System.exit(<span class="number"></span>);

- }

- };

- <span class="keyword">private</span> <span class="keyword">boolean</span> checkUser(){

- String username=user.getText().toString();

- String pass=password.getText().toString();

- DefaultHttpClient mHttpClient = <span class="keyword">new</span> DefaultHttpClient();

- HttpPost mPost = <span class="keyword">new</span> HttpPost(<span class="string">&#8220;http://10.0.2.2/web/php/login.php&#8221;</span>);

- <span class="comment">//传递用户名和密码相当于</span>

- <span class="comment">//http://10.0.2.2/web/php/login.php?username=&#8221;&password=&#8221;</span>

- List<BasicNameValuePair> pairs = <span class="keyword">new</span> ArrayList<BasicNameValuePair>();

- pairs.add(<span class="keyword">new</span> BasicNameValuePair(<span class="string">&#8220;username&#8221;</span>, username));

- pairs.add(<span class="keyword">new</span> BasicNameValuePair(<span class="string">&#8220;password&#8221;</span>, pass));

- <span class="keyword">try</span> {

- mPost.setEntity(<span class="keyword">new</span> UrlEncodedFormEntity(pairs, HTTP.UTF_8));

- } <span class="keyword">catch</span> (UnsupportedEncodingException e) {

- <span class="comment">// TODO Auto-generated catch block</span>

- e.printStackTrace();

- }

- <span class="keyword">try</span> {

- HttpResponse response = mHttpClient.execute(mPost);

- <span class="keyword">int</span> res = response.getStatusLine().getStatusCode();

- <span class="keyword">if</span> (res == <span class="number">200</span>) {

- HttpEntity entity = response.getEntity();

- <span class="keyword">if</span> (entity != <span class="keyword">null</span>) {

- String info = EntityUtils.toString(entity);

- System.out.println(<span class="string">&#8220;info&#8212;&#8212;&#8212;&#8211;&#8220;</span>+info);

- <span class="comment">//以下主要是对服务器端返回的数据进行解析</span>

- JSONObject jsonObject=<span class="keyword">null</span>;

- <span class="comment">//flag为登录成功与否的标记,从服务器端返回的数据</span>

- String flag=<span class="string">&#8220;&#8221;</span>;

- String name=<span class="string">&#8220;&#8221;</span>;

- String userid=<span class="string">&#8220;&#8221;</span>;

- String sessionid=<span class="string">&#8220;&#8221;</span>;

- <span class="keyword">try</span> {

- jsonObject = <span class="keyword">new</span> JSONObject(info);

- flag = jsonObject.getString(<span class="string">&#8220;flag&#8221;</span>);

- name = jsonObject.getString(<span class="string">&#8220;name&#8221;</span>);

- userid = jsonObject.getString(<span class="string">&#8220;userid&#8221;</span>);

- sessionid = jsonObject.getString(<span class="string">&#8220;sessionid&#8221;</span>);

- } <span class="keyword">catch</span> (JSONException e) {

- <span class="comment">// TODO Auto-generated catch block</span>

- e.printStackTrace();

- }

- <span class="comment">//根据服务器端返回的标记,判断服务端端验证是否成功</span>

- <span class="keyword">if</span>(flag.equals(<span class="string">&#8220;success&#8221;</span>)){

- <span class="comment">//为session传递相应的值,用于在session过程中记录相关用户信息</span>

- session.put(<span class="string">&#8220;s_userid&#8221;</span>, userid);

- session.put(<span class="string">&#8220;s_username&#8221;</span>, name);

- session.put(<span class="string">&#8220;s_sessionid&#8221;</span>, sessionid);

- <span class="keyword">return</span> <span class="keyword">true</span>;

- }

- <span class="keyword">else</span>{

- <span class="keyword">return</span> <span class="keyword">false</span>;

- }

- }

- <span class="keyword">else</span>{

- <span class="keyword">return</span> <span class="keyword">false</span>;

- }

- }

- } <span class="keyword">catch</span> (ClientProtocolException e) {

- <span class="comment">// TODO Auto-generated catch block</span>

- e.printStackTrace();

- } <span class="keyword">catch</span> (IOException e) {

- <span class="comment">// TODO Auto-generated catch block</span>

- e.printStackTrace();

- }

- <span class="keyword">return</span> <span class="keyword">false</span>;

- }

- }
  1. LoginSuccessActivity.java主要获取php的session唯一的标识id以及用户的一些基本信息,session id则作为本次用户登录状态在服务器的唯一标识,即确定用户的唯一状态进行相关操作。LoginSuccessActivity.java类的方法与GetWebSession.java类似。其主要功能是获取session id后再次发送session id到服务器进行验证,根据封装的session数据验证用户操作权限等。

代码如下:

[view plain](http://www.yoyong.com/archives/178#)[copy to clipboard](http://www.yoyong.com/archives/178#)[print](http://www.yoyong.com/archives/178#)[?](http://www.yoyong.com/archives/178#)
- <span class="keyword">package</span> com.login.main;

- <span class="keyword">import</span> java.io.IOException;

- <span class="keyword">import</span> java.io.UnsupportedEncodingException;

- <span class="keyword">import</span> java.util.ArrayList;

- <span class="keyword">import</span> java.util.HashMap;

- <span class="keyword">import</span> java.util.List;

- <span class="keyword">import</span> org.apache.http.HttpEntity;

- <span class="keyword">import</span> org.apache.http.HttpResponse;

- <span class="keyword">import</span> org.apache.http.client.ClientProtocolException;

- <span class="keyword">import</span> org.apache.http.client.entity.UrlEncodedFormEntity;

- <span class="keyword">import</span> org.apache.http.client.methods.HttpPost;

- <span class="keyword">import</span> org.apache.http.impl.client.DefaultHttpClient;

- <span class="keyword">import</span> org.apache.http.message.BasicNameValuePair;

- <span class="keyword">import</span> org.apache.http.protocol.HTTP;

- <span class="keyword">import</span> org.apache.http.util.EntityUtils;

- <span class="keyword">import</span> org.json.JSONException;

- <span class="keyword">import</span> org.json.JSONObject;

- <span class="keyword">import</span> android.app.Activity;

- <span class="keyword">import</span> android.content.Context;

- <span class="keyword">import</span> android.content.Intent;

- <span class="keyword">import</span> android.os.Bundle;

- <span class="keyword">import</span> android.view.View;

- <span class="keyword">import</span> android.view.View.OnClickListener;

- <span class="keyword">import</span> android.widget.Button;

- <span class="keyword">import</span> android.widget.TextView;

- <span class="keyword">import</span> android.widget.Toast;

- <span class="keyword">public</span> <span class="keyword">class</span> LoginSuccessActivity <span class="keyword">extends</span> Activity{

- <span class="keyword">private</span> HashMap<String, String>session;

- <span class="annotation">@SuppressWarnings</span>(<span class="string">&#8220;unchecked&#8221;</span>)

- <span class="annotation">@Override</span>

- <span class="keyword">protected</span> <span class="keyword">void</span> onCreate(Bundle savedInstanceState) {

- <span class="comment">// TODO Auto-generated method stub</span>

- <span class="keyword">super</span>.onCreate(savedInstanceState);

- setContentView(R.layout.login_success);

- <span class="comment">//获取从登录成功后界面的传递的参数</span>

- session =  (HashMap<String, String>) <span class="keyword">this</span>.getIntent()

- .getBundleExtra(<span class="string">&#8220;session&#8221;</span>).getSerializable(<span class="string">&#8220;sessionid&#8221;</span>);

- <span class="comment">//读取session的基本信息,并显示相应的控件</span>

- String userid_info=session.get(<span class="string">&#8220;s_userid&#8221;</span>);

- String username_info=session.get(<span class="string">&#8220;s_username&#8221;</span>);

- String session_id=session.get(<span class="string">&#8220;s_sessionid&#8221;</span>);

- <span class="comment">//显示相应的内容到控件</span>

- TextView userid_show=(TextView)findViewById(R.id.userid_show);

- userid_show.setText(userid_info);

- TextView username_show=(TextView)findViewById(R.id.username_show);

- username_show.setText(username_info);

- TextView sessionid_show=(TextView)findViewById(R.id.sessionid_show);

- sessionid_show.setText(session_id);

- <span class="comment">//根据本次session再次获取用户信息</span>

- Button getInfo=(Button)findViewById(R.id.getinfo);

- getInfo.setOnClickListener(getInfoClick);

- }

- OnClickListener getInfoClick=<span class="keyword">new</span> OnClickListener() {

- <span class="annotation">@Override</span>

- <span class="keyword">public</span> <span class="keyword">void</span> onClick(View v) {

- <span class="comment">// TODO Auto-generated method stub</span>

- <span class="keyword">if</span>(getUserInfo()){

- Context context = v.getContext();

- Intent intent = <span class="keyword">new</span> Intent(context,

- GetUserInfoActivity.<span class="keyword">class</span>);

- <span class="comment">//传递session参数,在用户登录成功后为session初始化赋值,即传递HashMap的值</span>

- Bundle map = <span class="keyword">new</span> Bundle();

- map.putSerializable(<span class="string">&#8220;sessionid&#8221;</span>, session);

- intent.putExtra(<span class="string">&#8220;session&#8221;</span>, map);

- context.startActivity(intent); <span class="comment">// 跳转到成功页面</span>

- }<span class="keyword">else</span>{

- Toast.makeText(v.getContext(), <span class="string">&#8220;数据为空!&#8221;</span>, Toast.LENGTH_SHORT).show();

- }

- }

- };

- <span class="keyword">private</span> <span class="keyword">boolean</span> getUserInfo(){

- String sess_username=session.get(<span class="string">&#8220;s_username&#8221;</span>);

- String sess_userid=session.get(<span class="string">&#8220;s_userid&#8221;</span>);

- String sess_id=session.get(<span class="string">&#8220;s_sessionid&#8221;</span>);

- DefaultHttpClient mHttpClient = <span class="keyword">new</span> DefaultHttpClient();

- HttpPost mPost = <span class="keyword">new</span> HttpPost(<span class="string">&#8220;http://10.0.2.2/web/php/getinfo.php&#8221;</span>);

- List<BasicNameValuePair> pairs = <span class="keyword">new</span> ArrayList<BasicNameValuePair>();

- pairs.add(<span class="keyword">new</span> BasicNameValuePair(<span class="string">&#8220;sess_userid&#8221;</span>, sess_userid));

- pairs.add(<span class="keyword">new</span> BasicNameValuePair(<span class="string">&#8220;sess_username&#8221;</span>, sess_username));

- pairs.add(<span class="keyword">new</span> BasicNameValuePair(<span class="string">&#8220;sess_sessionid&#8221;</span>, sess_id));

- <span class="keyword">try</span> {

- mPost.setEntity(<span class="keyword">new</span> UrlEncodedFormEntity(pairs, HTTP.UTF_8));

- } <span class="keyword">catch</span> (UnsupportedEncodingException e) {

- <span class="comment">// TODO Auto-generated catch block</span>

- e.printStackTrace();

- }

- <span class="keyword">try</span> {

- HttpResponse response = mHttpClient.execute(mPost);

- <span class="keyword">int</span> res = response.getStatusLine().getStatusCode();

- <span class="keyword">if</span> (res == <span class="number">200</span>) {

- HttpEntity entity = response.getEntity();

- <span class="keyword">if</span> (entity != <span class="keyword">null</span>) {

- String info = EntityUtils.toString(entity);

- System.out.println(<span class="string">&#8220;info&#8212;&#8212;&#8212;&#8211;&#8220;</span>+info);

- <span class="comment">//以下主要是对服务器端返回的数据进行解析</span>

- JSONObject jsonObject=<span class="keyword">null</span>;

- <span class="comment">//flag为登录成功与否的标记,从服务器端返回的数据</span>

- String flag=<span class="string">&#8220;&#8221;</span>;

- String userinfo=<span class="string">&#8220;&#8221;</span>;

- String level=<span class="string">&#8220;&#8221;</span>;

- String sessionid=<span class="string">&#8220;&#8221;</span>;

- <span class="keyword">try</span> {

- jsonObject = <span class="keyword">new</span> JSONObject(info);

- flag = jsonObject.getString(<span class="string">&#8220;flag&#8221;</span>);

- userinfo = jsonObject.getString(<span class="string">&#8220;info&#8221;</span>);

- level = jsonObject.getString(<span class="string">&#8220;level&#8221;</span>);

- sessionid = jsonObject.getString(<span class="string">&#8220;sessionid&#8221;</span>);

- } <span class="keyword">catch</span> (JSONException e) {

- <span class="comment">// TODO Auto-generated catch block</span>

- e.printStackTrace();

- }

- <span class="comment">//根据服务器端返回的标记,判断服务端端验证是否成功</span>

- <span class="keyword">if</span>(flag.equals(<span class="string">&#8220;notempty&#8221;</span>)){

- <span class="comment">//为session传递相应的值,用于在session过程中记录相关用户信息</span>

- session.put(<span class="string">&#8220;info_userinfo&#8221;</span>, userinfo);

- session.put(<span class="string">&#8220;info_level&#8221;</span>, level);

- session.put(<span class="string">&#8220;info_sessionid&#8221;</span>, sessionid);

- <span class="keyword">return</span> <span class="keyword">true</span>;

- }

- <span class="keyword">else</span>{

- <span class="keyword">return</span> <span class="keyword">false</span>;

- }

- }

- <span class="keyword">else</span>{

- <span class="keyword">return</span> <span class="keyword">false</span>;

- }

- }

- } <span class="keyword">catch</span> (ClientProtocolException e) {

- <span class="comment">// TODO Auto-generated catch block</span>

- e.printStackTrace();

- } <span class="keyword">catch</span> (IOException e) {

- <span class="comment">// TODO Auto-generated catch block</span>

- e.printStackTrace();

- }

- <span class="keyword">return</span> <span class="keyword">false</span>;

- }

- }

3.GetUserInfoActivity.java类是根据用户登录后产生唯一session 标识进行操作获取用户详细信息的类。

代码如下:

[view plain](http://www.yoyong.com/archives/178#)[copy to clipboard](http://www.yoyong.com/archives/178#)[print](http://www.yoyong.com/archives/178#)[?](http://www.yoyong.com/archives/178#)
- <span class="keyword">package</span> com.login.main;

- <span class="keyword">import</span> java.util.HashMap;

- <span class="keyword">import</span> android.app.Activity;

- <span class="keyword">import</span> android.os.Bundle;

- <span class="keyword">import</span> android.widget.TextView;

- <span class="keyword">public</span> <span class="keyword">class</span> GetUserInfoActivity <span class="keyword">extends</span> Activity{

- <span class="keyword">private</span> HashMap<String, String>session;

- <span class="annotation">@SuppressWarnings</span>(<span class="string">&#8220;unchecked&#8221;</span>)

- <span class="annotation">@Override</span>

- <span class="keyword">protected</span> <span class="keyword">void</span> onCreate(Bundle savedInstanceState) {

- <span class="comment">// TODO Auto-generated method stub</span>

- <span class="keyword">super</span>.onCreate(savedInstanceState);

- setContentView(R.layout.get_info);

- <span class="comment">//获取从登录成功后界面的再次传递的参数</span>

- session =  (HashMap<String, String>) <span class="keyword">this</span>.getIntent().

- getBundleExtra(<span class="string">&#8220;session&#8221;</span>).getSerializable(<span class="string">&#8220;sessionid&#8221;</span>);

- <span class="comment">//读取session的基本信息,并显示相应的控件</span>

- String session_info=session.get(<span class="string">&#8220;info_userinfo&#8221;</span>);

- String session_level=session.get(<span class="string">&#8220;info_level&#8221;</span>);

- String session_id=session.get(<span class="string">&#8220;info_sessionid&#8221;</span>);

- <span class="comment">//显示相应的内容到控件</span>

- System.out.println(<span class="string">&#8220;session_info&#8212;&#8212;&#8211;&#8220;</span>+session_info);

- TextView get_info=(TextView)findViewById(R.id.get_info);

- get_info.setText(session_info);

- TextView get_level=(TextView)findViewById(R.id.get_level);

- get_level.setText(session_level);

- TextView get_sessionid=(TextView)findViewById(R.id.get_sessionid);

- get_sessionid.setText(session_id);

- }

- }

4.三个布局的xml文件

(1.)main.xml

[view plain](http://www.yoyong.com/archives/178#)[copy to clipboard](http://www.yoyong.com/archives/178#)[print](http://www.yoyong.com/archives/178#)[?](http://www.yoyong.com/archives/178#)
- <span class="tag"><?</span><span class="tag-name">xml</span> <span class="attribute">version</span>=<span class="attribute-value">&#8220;1.0&#8221;</span> <span class="attribute">encoding</span>=<span class="attribute-value">&#8220;utf-8&#8221;</span><span class="tag">?></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">xmlns:android</span>=<span class="attribute-value">&#8220;http://schemas.android.com/apk/res/android&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;vertical&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span> <span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;用户&#8221;</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">EditText</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;&#8221;</span> <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:singleLine</span>=<span class="attribute-value">&#8220;true&#8221;</span> <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/user&#8221;</span>  <span class="tag">></span><span class="tag"></</span><span class="tag-name">EditText</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;密码&#8221;</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">EditText</span> <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/password&#8221;</span>

- <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;&#8221;</span> <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:password</span>=<span class="attribute-value">&#8220;true&#8221;</span> <span class="attribute">android:singleLine</span>=<span class="attribute-value">&#8220;true&#8221;</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">EditText</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;horizontal&#8221;</span>

- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">&#8220;0dip&#8221;</span><span class="tag">></span>

- 
- <span class="tag"><</span><span class="tag-name">TableRow</span> <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">Button</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span> <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;登录&#8221;</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/loginBtn&#8221;</span>

- <span class="attribute">android:layout_weight</span>=<span class="attribute-value">&#8220;1&#8221;</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">Button</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">Button</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;退出&#8221;</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/logoutBtn&#8221;</span>

- <span class="attribute">android:layout_weight</span>=<span class="attribute-value">&#8220;1&#8221;</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">Button</span><span class="tag">></span>

- 
- <span class="tag"></</span><span class="tag-name">TableRow</span><span class="tag">></span> <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span> <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

(2.)login_success.xml

[view plain](http://www.yoyong.com/archives/178#)[copy to clipboard](http://www.yoyong.com/archives/178#)[print](http://www.yoyong.com/archives/178#)[?](http://www.yoyong.com/archives/178#)
- <span class="tag"><?</span><span class="tag-name">xml</span> <span class="attribute">version</span>=<span class="attribute-value">&#8220;1.0&#8221;</span> <span class="attribute">encoding</span>=<span class="attribute-value">&#8220;utf-8&#8221;</span><span class="tag">?></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">xmlns:android</span>=<span class="attribute-value">&#8220;http://schemas.android.com/apk/res/android&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;vertical&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;horizontal&#8221;</span>

- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">&#8220;0dip&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span>

- <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;用户ID:&#8221;</span>   <span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;&#8221;</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/userid_show&#8221;</span> <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;horizontal&#8221;</span>

- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">&#8220;0dip&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;用户名: &#8220;</span>   <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;&#8221;</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/username_show&#8221;</span> <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;horizontal&#8221;</span>

- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">&#8220;0dip&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;本次会话:&#8221;</span>   <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;&#8221;</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/sessionid_show&#8221;</span> <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;horizontal&#8221;</span>

- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">&#8220;0dip&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">Button</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/getinfo&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;根据本次会话再次获取用户信息&#8221;</span>

- <span class="tag">></span><span class="tag"></</span><span class="tag-name">Button</span><span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

(3.)get_info.xml

[view plain](http://www.yoyong.com/archives/178#)[copy to clipboard](http://www.yoyong.com/archives/178#)[print](http://www.yoyong.com/archives/178#)[?](http://www.yoyong.com/archives/178#)
- <span class="tag"><?</span><span class="tag-name">xml</span> <span class="attribute">version</span>=<span class="attribute-value">&#8220;1.0&#8221;</span> <span class="attribute">encoding</span>=<span class="attribute-value">&#8220;utf-8&#8221;</span><span class="tag">?></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">xmlns:android</span>=<span class="attribute-value">&#8220;http://schemas.android.com/apk/res/android&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;vertical&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;horizontal&#8221;</span>

- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">&#8220;0dip&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;用户信息: &#8220;</span>   <span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;&#8221;</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/get_info&#8221;</span> <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;horizontal&#8221;</span>

- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">&#8220;0dip&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;用户级别:&#8221;</span>   <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;&#8221;</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/get_level&#8221;</span> <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

- 
- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;horizontal&#8221;</span>

- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">&#8220;0dip&#8221;</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;本次会话:&#8221;</span>   <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">TextView</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span> <span class="attribute">android:text</span>=<span class="attribute-value">&#8220;&#8221;</span>

- <span class="attribute">android:id</span>=<span class="attribute-value">&#8220;@+id/get_sessionid&#8221;</span> <span class="tag">></span><span class="tag"></</span><span class="tag-name">TextView</span><span class="tag">></span>

- <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

- <span class="tag"><</span><span class="tag-name">LinearLayout</span> <span class="attribute">android:layout_height</span>=<span class="attribute-value">&#8220;wrap_content&#8221;</span>

- <span class="attribute">android:layout_width</span>=<span class="attribute-value">&#8220;fill_parent&#8221;</span>

- <span class="attribute">android:orientation</span>=<span class="attribute-value">&#8220;horizontal&#8221;</span>

- <span class="attribute">android:paddingLeft</span>=<span class="attribute-value">&#8220;0dip&#8221;</span><span class="tag">></span> <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span> <span class="tag"></</span><span class="tag-name">LinearLayout</span><span class="tag">></span>

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();//注意没有参数

具体代码如下:

[view plain](http://www.yoyong.com/archives/178#)[copy to clipboard](http://www.yoyong.com/archives/178#)[print](http://www.yoyong.com/archives/178#)[?](http://www.yoyong.com/archives/178#)
- <?php

- header(<span class="string">&#8220;Content-Type: text/html; charset=utf-8&#8221;</span>) ;

- <span class="comment">//包含数据库连接文件</span>

- <span class="keyword">include</span>(<span class="string">&#8216;conn.php&#8217;</span>);

- session_start();

- <span class="vars">$username</span> = htmlspecialchars(<span class="vars">$_POST</span>[<span class="string">&#8220;username&#8221;</span>]);

- <span class="vars">$password</span>=<span class="vars">$_POST</span>[<span class="string">&#8220;password&#8221;</span>];

- mysql_query(<span class="string">&#8220;set names utf8&#8221;</span>);

- <span class="comment">//检测用户名及密码是否正确</span>

- <span class="vars">$check_query</span> = mysql_query(<span class="string">&#8220;select id ,name from user where name=&#8217;$username&#8217; and</span>

- <span class="string">password=&#8217;$password&#8217; limit 1&#8243;</span>);

- <span class="vars">$arr</span>=<span class="keyword">array</span>();<span class="comment">//空的数组,该数组主要是格式化数据并封装成json格式发送到客户端</span>

- <span class="keyword">if</span>(<span class="vars">$result</span> = mysql_fetch_array(<span class="vars">$check_query</span>)){

- <span class="comment">//登录成功</span>

- <span class="vars">$_SESSION</span>[<span class="string">&#8216;username&#8217;</span>] = <span class="vars">$result</span>[<span class="string">&#8216;name&#8217;</span>];

- <span class="vars">$_SESSION</span>[<span class="string">&#8216;userid&#8217;</span>] = <span class="vars">$result</span>[<span class="string">&#8216;id&#8217;</span>];

- <span class="comment">//获取当前session id</span>

- <span class="vars">$sessionid</span>=session_id();

- <span class="vars">$_SESSION</span>[<span class="string">&#8216;$sessionid&#8217;</span>] = <span class="vars">$sessionid</span>;

- <span class="vars">$arr</span> = <span class="keyword">array</span>(

- <span class="string">&#8216;flag&#8217;</span>=><span class="string">&#8216;success&#8217;</span>,

- <span class="string">&#8216;name&#8217;</span>=><span class="vars">$result</span>[<span class="string">&#8216;name&#8217;</span>],

- <span class="string">&#8216;userid&#8217;</span>=><span class="vars">$result</span>[<span class="string">&#8216;id&#8217;</span>],

- <span class="string">&#8216;sessionid&#8217;</span>=><span class="vars">$sessionid</span>

- );

- <span class="comment">//封装json,如果php版本低于5.2,则不支持json_encode()方法,</span>

- <span class="comment">//可以参考本文件夹中php_json_encode.php中php_json_encode()方法代替json_encode();</span>

- <span class="func">echo</span> json_encode(<span class="vars">$arr</span>);

- } <span class="keyword">else</span> {

- <span class="vars">$arr</span> = <span class="keyword">array</span>(

- <span class="string">&#8216;flag&#8217;</span>=><span class="string">&#8216;error&#8217;</span>,

- <span class="string">&#8216;name&#8217;</span>=><span class="string">&#8221;</span>,

- <span class="string">&#8216;userid&#8217;</span>=><span class="string">&#8221;</span>,

- <span class="string">&#8216;sessionid&#8217;</span>=><span class="string">&#8221;</span>

- ); <span class="comment">//封装json,如果php版本低于5.2,则不支持json_encode()方法,</span>

- <span class="comment">//可以参考本文件夹中php_json_encode.php中php_json_encode()方法代替json_encode();</span>

- <span class="func">echo</span> json_encode(<span class="vars">$arr</span>);

- }

- ?>
  1. getinfo.php文件主要是用户再次查询信息验证session,而不是重新产生session,以记录用户状态。通过验证flag是否为empty判断数据是否显示。最后封装成json发送到客户端

获取本次session的方法:

sessionid=_POST[“sess_sessionid”];//获取android客户端的sessionid

session_id($sessionid);//有参数

session_start();//启动session

具体代码如下:

[view plain](http://www.yoyong.com/archives/178#)[copy to clipboard](http://www.yoyong.com/archives/178#)[print](http://www.yoyong.com/archives/178#)[?](http://www.yoyong.com/archives/178#)
- <?php

- header(<span class="string">&#8220;Content-Type: text/html; charset=utf-8&#8221;</span>) ;

- <span class="keyword">include</span>(<span class="string">&#8216;conn.php&#8217;</span>);

- <span class="comment">//获取从客户端LoginSuccessActivity类传递的参数</span>

- <span class="vars">$userid</span>=<span class="vars">$_POST</span>[<span class="string">&#8220;sess_userid&#8221;</span>];

- <span class="vars">$username</span>=<span class="vars">$_POST</span>[<span class="string">&#8220;sess_username&#8221;</span>];

- <span class="comment">//获取客户端传递的session标识</span>

- <span class="vars">$sessionid</span>=<span class="vars">$_POST</span>[<span class="string">&#8220;sess_sessionid&#8221;</span>];

- session_id(<span class="vars">$sessionid</span>);

- <span class="comment">//将会根据session id获得原来的session</span>

- session_start();

- <span class="comment">//获取服务器端原来session记录的username,并且根据客户端传过来的username比较进行验证操作</span>

- <span class="vars">$sess_username</span>=<span class="vars">$_SESSION</span>[<span class="string">&#8216;username&#8217;</span>];

- <span class="keyword">if</span>(<span class="vars">$username</span>==<span class="vars">$sess_username</span>){

- mysql_query(<span class="string">&#8220;set names utf8&#8221;</span>);

- <span class="comment">//查询用户基本信息</span>

- <span class="vars">$check_query</span> = mysql_query(<span class="string">&#8220;select userinfo,level from info where userid=&#8217;$userid&#8217;  limit 1&#8221;</span>);

- <span class="vars">$arr</span>=<span class="keyword">array</span>();<span class="comment">//空的数组</span>

- <span class="keyword">if</span>(<span class="vars">$result</span> = mysql_fetch_array(<span class="vars">$check_query</span>)){

- <span class="vars">$arr</span> = <span class="keyword">array</span>(

- <span class="string">&#8216;flag&#8217;</span>=><span class="string">&#8216;notempty&#8217;</span>,

- <span class="string">&#8216;info&#8217;</span>=><span class="vars">$result</span>[<span class="string">&#8216;userinfo&#8217;</span>],

- <span class="string">&#8216;level&#8217;</span>=><span class="vars">$result</span>[<span class="string">&#8216;level&#8217;</span>],

- <span class="string">&#8216;sessionid&#8217;</span>=><span class="vars">$sessionid</span>

- );

- <span class="func">echo</span> json_encode(<span class="vars">$arr</span>);

- }

- } <span class="keyword">else</span> {

- <span class="vars">$arr</span> = <span class="keyword">array</span>(

- <span class="string">&#8216;flag&#8217;</span>=><span class="string">&#8217;empty&#8217;</span>,

- <span class="string">&#8216;name&#8217;</span>=><span class="string">&#8221;</span>,

- <span class="string">&#8216;userid&#8217;</span>=><span class="string">&#8221;</span>,

- <span class="string">&#8216;sessionid&#8217;</span>=><span class="vars">$sessionid</span>

- );

- <span class="func">echo</span> json_encode(<span class="vars">$arr</span>);

- }

- ?>

3.)数据库端(MYSQL)

采用mysql建立数据库,建立两个简单的数据表:user和info。

[view plain](http://www.yoyong.com/archives/178#)[copy to clipboard](http://www.yoyong.com/archives/178#)[print](http://www.yoyong.com/archives/178#)[?](http://www.yoyong.com/archives/178#)
- /*

- MySQL Data Transfer

- Source Host: localhost

- Source <span class="keyword">Database</span>: login

- Target Host: localhost

- Target <span class="keyword">Database</span>: login

- <span class="keyword">Date</span>: 2011-6-14 11:10:46

- */

- 
- <span class="keyword">SET</span> FOREIGN_KEY_CHECKS=0;

- <span class="comment">&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</span>

- <span class="comment">&#8212; Table structure for info</span>

- <span class="comment">&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</span>

- <span class="keyword">CREATE</span> <span class="keyword">TABLE</span> `info` (

- `id` <span class="keyword">int</span>(12) <span class="op">NOT</span> <span class="op">NULL</span> AUTO_INCREMENT,

- `userid` <span class="keyword">int</span>(12) <span class="keyword">DEFAULT</span> <span class="op">NULL</span>,

- `userinfo` <span class="keyword">varchar</span>(100) <span class="keyword">DEFAULT</span> <span class="op">NULL</span>,

- `<span class="keyword">level</span>` <span class="keyword">int</span>(2) <span class="keyword">DEFAULT</span> <span class="op">NULL</span>,

- <span class="keyword">PRIMARY</span> <span class="keyword">KEY</span> (`id`),

- <span class="keyword">KEY</span> `useid` (`userid`),

- <span class="keyword">CONSTRAINT</span> `useid` <span class="keyword">FOREIGN</span> <span class="keyword">KEY</span> (`userid`) <span class="keyword">REFERENCES</span> `<span class="func">user</span>` (`id`)

- ) ENGINE=InnoDB AUTO_INCREMENT=3 <span class="keyword">DEFAULT</span> CHARSET=utf8;

- 
- <span class="comment">&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</span>

- <span class="comment">&#8212; Table structure for user</span>

- <span class="comment">&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</span>

- <span class="keyword">CREATE</span> <span class="keyword">TABLE</span> `<span class="func">user</span>` (

- `id` <span class="keyword">int</span>(12) <span class="op">NOT</span> <span class="op">NULL</span> AUTO_INCREMENT,

- `<span class="keyword">name</span>` <span class="keyword">varchar</span>(20) <span class="keyword">DEFAULT</span> <span class="op">NULL</span>,

- `<span class="keyword">password</span>` <span class="keyword">varchar</span>(20) <span class="keyword">DEFAULT</span> <span class="op">NULL</span>,

- `status` <span class="keyword">int</span>(2) <span class="keyword">DEFAULT</span> <span class="op">NULL</span>,

- <span class="keyword">PRIMARY</span> <span class="keyword">KEY</span> (`id`)

- ) ENGINE=InnoDB AUTO_INCREMENT=3 <span class="keyword">DEFAULT</span> CHARSET=utf8;

- 
- <span class="comment">&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</span>

- <span class="comment">&#8212; Records</span>

- <span class="comment">&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</span>

- <span class="keyword">INSERT</span> <span class="keyword">INTO</span> `info` <span class="keyword">VALUES</span> (<span class="string">&#8216;1&#8217;</span>, <span class="string">&#8216;1&#8217;</span>, <span class="string">&#8216;charlie  is a developer.&#8217;</span>, <span class="string">&#8216;1&#8217;</span>);

- <span class="keyword">INSERT</span> <span class="keyword">INTO</span> `info` <span class="keyword">VALUES</span> (<span class="string">&#8216;2&#8217;</span>, <span class="string">&#8216;2&#8217;</span>, <span class="string">&#8216;william is a boss.&#8217;</span>, <span class="string">&#8217;20&#8217;</span>);

- <span class="keyword">INSERT</span> <span class="keyword">INTO</span> `<span class="func">user</span>` <span class="keyword">VALUES</span> (<span class="string">&#8216;1&#8217;</span>, <span class="string">&#8216;charlie&#8217;</span>, <span class="string">&#8216;password&#8217;</span>, <span class="string">&#8216;1&#8217;</span>);

- <span class="keyword">INSERT</span> <span class="keyword">INTO</span> `<span class="func">user</span>` <span class="keyword">VALUES</span> (<span class="string">&#8216;2&#8217;</span>, <span class="string">&#8216;william&#8217;</span>, <span class="string">&#8216;mypassword&#8217;</span>, <span class="string">&#8216;2&#8217;</span>);

 

运行效果如图:

图 -1 GetWebSession.java类的布局

图 -2 LoginSuccessActivity.java类获取的session id以及用户基本信息

图 -3 GetWebSession.java获取用户详细信息及本次session的一致性

 

转自:http://www.yoyong.com/archives/178