云云忠飞鸽忠飞鸽上树的猪,游泳的鸟,悲剧的程序员!上树的猪,游泳的鸟,悲剧的程序员!aandroid获取web服务器端session并验证登陆ndroid获取web服务器端session并验证登陆分类:ANDROID2012-09-0911:26296人阅读评论(0)收藏举报传统网页实现用户登陆一般采用session或cookie记录用户基本信息又或者两者结合起来使用。android也可以采用session实现用户登陆验证并记录用户登陆状态时的基本信息,session是在服务器端的;而类似cookie的记录方式,则可以在客户端采用xml文件记录用户基本信息,重要数据则可以加密存放客户端。android实现的session登陆功能与网页请求不同的是,网页形式的一次成功的登陆请求后,再点击其他页面时,session一直是存在的,在一定时间内是有效的;而采用android客户端请求的一次成功登陆后,再次发送新的请求,则会产生新的session,而不是原来的。这就需要记录session的id号,并在整个请求过程中都记录并传递这个id号,才能保证session的一致性。以获取phpsession为例,主要思路实现分为客户端与服务器端3个步骤。附件附件:GetWebSession.zip(71.44KB,下载次数下载次数:63)2012-5-814:09上传点击文件名下载附件下载积分:下载豆-11.)客户端(客户端(Android))建立一个名为GetWebSession的android项目,编写GetWebSession.java,LoginSuccessActivity.java,GetUserInfoActivity.java三个activity类。1.GetWebSession.java主要是实现布局界面以及发送用户名和密码到php服务器端验证,如果验证成功则跳转到LoginSuccessActivity.java类。GetWebSession.java主要涉及到与服务器端连接请求,对从服务器端返回的json数据(如用户id,session等)进行解析,并存入HashMap,传递到LoginSuccessActivity.java代码如下:1.packagecom.login.main;2.importjava.io.IOException;3.importjava.io.UnsupportedEncodingException;4.importjava.util.ArrayList;5.importjava.util.HashMap;6.importjava.util.List;7.importorg.apache.http.HttpEntity;8.importorg.apache.http.HttpResponse;9.importorg.apache.http.client.ClientProtocolException;10.importorg.apache.http.client.entity.UrlEncodedFormEntity;11.importorg.apache.http.client.methods.HttpPost;111.importorg.apache.http.client.methods.HttpPost;12.importorg.apache.http.impl.client.DefaultHttpClient;13.importorg.apache.http.message.BasicNameValuePair;14.importorg.apache.http.protocol.HTTP;15.importorg.apache.http.util.EntityUtils;16.importorg.json.JSONException;17.importorg.json.JSONObject;18.importandroid.app.Activity;19.importandroid.content.Context;20.importandroid.content.Intent;21.importandroid.os.Bundle;22.importandroid.view.View;23.importandroid.view.View.OnClickListener;24.importandroid.widget.Button;25.importandroid.widget.EditText;26.importandroid.widget.Toast;27.publicclassGetWebSessionextendsActivity{28./**Calledwhentheactivityisfirstcreated.*/29.privateEditTextuser;30.privateEditTextpassword;31.privateButtonloginBtn;32.privateButtonlogoutBtn;33.//主要是记录用户会话过程中的一些用户的基本信息34.privateHashMapString,Stringsession=newHashMapString,String();35.@Override36.publicvoidonCreate(BundlesavedInstanceState){37.super.onCreate(savedInstanceState);38.setContentView(R.layout.main);39.user=(EditText)findViewById(R.id.user);40.password=(EditText)findViewById(R.id.password);240.password=(EditText)findViewById(R.id.password);41.loginBtn=(Button)findViewById(R.id.loginBtn);42.loginBtn.setOnClickListener(loginClick);43.logoutBtn=(Button)findViewById(R.id.logoutBtn);44.logoutBtn.setOnClickListener(logoutClick);45.}46.OnClickListenerloginClick=newOnClickListener(){47.@Override48.publicvoidonClick(Viewv){49.//TODOAuto-generatedmethodstub50.if(checkUser()){51.Toast.makeText(v.getContext(),用户登录成功!,Toast.LENGTH_SHORT).show();52.Contextcontext=v.getContext();53.Intentintent=newIntent(context,54.LoginSuccessActivity.class);55.//传递session参数,在用户登录成功后为session初始化赋值,即传递HashMap的值56.Bundlemap=newBundle();57.map.putSerializable(sessionid,session);58.intent.putExtra(session,map);59.context.startActivity(intent);//跳转到成功页面60.}61.else62.Toast.makeText(v.getContext(),用户验证失败!,Toast.LENGTH_SHORT).show();63.}64.};65.OnClickListenerlogoutClick=newOnClickListener(){66.@Override67.publicvoidonClick(Viewv){68.//TODOAuto-generatedmethodstub69.System.exit(0);369.System.exit(0);70.}71.};72.privatebooleancheckUser(){73.Stringusername=user.getText().toString();74.Stringpass=password.getText().toString();75.DefaultHttpClientmHttpClient=newDefaultHttpClient();76.HttpPostmPost=newHttpPost();77.//传递用户名和密码相当于78.//=''&password=''79.ListBasicNameValuePairpairs=newArrayListBasicNameValuePair();80.pairs.add(newBasicNameValuePair(username,username));81.pairs.add(newBasicNameValuePair(password,pass));82.try{83.mPost.setEntity(newUrlEncodedFormEntity(pairs,HTTP.UTF_8));84.}catch(UnsupportedEncodingExceptione){85.//TODOAuto-generatedcatchblock86.e.printStackTrace();87.}88.try{89.HttpResponseresponse=mHttpClient.execute(mPost);90.intres=response.getStatusLine().getStatusCode();91.if(res==200){92.HttpEntityentity=response.getEntity();93.if(entity!=null){94.Stringinfo=EntityUtils.toString(entity);95.System.out.println(info-----------+info);96.//以下主要是对服务器端返回的数据进行解析97.JSONObjectjsonObject=null;98.//flag为登录成功与否的标记,从服务器端返回的数据498.//flag为登录成功与否的标记,从服务器端返回的数据99.Stringflag=;100.Stringname=;101.Stringuserid=;102.Stringsessionid=;103.try{104.jsonObject=newJSONObject(info);105.flag=jsonObject.getString(flag);106.name=jsonObject.getString(name);107.userid=jsonObject.getString(userid);108.sessionid=jsonObject.getString(sessionid);109.}catch(JSONExceptione){110.//TODOAuto-generatedcatchblock111.e.printStackTrace();112.}113.//根据服务器端返回的标记,判断服务端端验证是否成功114.if(flag.equals(success)){115.//为session传递相应的值,用于在session过程中记录相关用户信息116.session.put(s_userid,userid);117.session.put(s_username