標籤:char cep status tpc 字串 並儲存 request null hash
近期需要實現一個功能,就是需要通過傳送簡訊進行註冊,現在想把簡訊驗證碼放到伺服器的session值中,當用戶端收到簡訊並提交簡訊碼時由asp.net服務端進行判斷,那麼如何共用這個session那麼需要在android用戶端中添加幾行代碼。如下操作。第一次資料請求時就擷取這個cookie的名稱並且得到這個cookie的值,這個即是sessionid的值並儲存在一個靜態變數中,然後在第二次請求資料的時候要將這個sessionid一併放在Cookie中發給伺服器,伺服器則是通過這個sessionid來識別究竟是那個用戶端在請求資料的,在asp.net中這個sessionid的名字叫做ASP.NET_SessionId,當然我們可以從程式中擷取,如下代碼:
//擷取服務端的這個sessionid的名稱
/* 擷取cookieStore */
List<Cookie> cookies = cookieStore.getCookies();
for(int i=0;i<cookies.size();i++){
String sessionid = cookies.get(i).getName(); 從這裡可以擷取到這個sessionid,即為 ASP.NET_SessionId
}
擷取sessionid的值
for(int i=0;i<cookies.size();i++){
if("ASP.NET_SessionId".equals(cookies.get(i).getName())){
JSESSIONID = cookies.get(i).getValue(); //這個即為sessionid的值
break;
}
}
完整的httputils代碼如下:
public static DefaultHttpClient httpClient = null;
private static String JSESSIONID; //定義一個靜態欄位,儲存sessionID
public static String getRequest(String url)
{
httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
try
{
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 10000);//設定連線逾時
HttpConnectionParams.setSoTimeout(params, 15000);//佈建要求逾時
get.setParams(params);
get.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
if(null != JSESSIONID){
get.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID);
}
//串連響應,通過HttpResponse獲得響應資訊
HttpResponse httpResponse = httpClient.execute(get);
if(httpResponse.getStatusLine().getStatusCode() == 200)
{
//取得響應字串
String result = EntityUtils.toString(httpResponse.getEntity());
return result;
}
}
catch (ClientProtocolException e)
{
return null;
}
catch (IOException e)
{
return null;
}
return null;
}
public static String postRequest(String url, HashMap<String, String> rawParams) throws Exception
{
httpClient = new DefaultHttpClient();
//建立POST請求方式
HttpPost post = new HttpPost(url);
HttpParams cparams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(cparams, 10000);//設定連線逾時
HttpConnectionParams.setSoTimeout(cparams, 15000);//佈建要求逾時
post.setParams(cparams);
post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
if(null != JSESSIONID){
post.setHeader("Cookie", "ASP.NET_SessionId="+JSESSIONID);
}
//使用NameValuePair來儲存要傳遞的參數,可以使用BasicNameValuePair來構造一個要被傳遞的參數
//通過add添加這個參數到NameValuePair中
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
for(String key : rawParams.keySet())
{
//添加要傳傳遞的參數
params.add(new BasicNameValuePair(key, rawParams.get(key)));
}
//post需要為參數設定字元集
HttpEntity httpEntity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
//請求httpRequest
post.setEntity(httpEntity);
//發送POST請求並擷取響應
HttpResponse httpResponse = null;
try
{
httpResponse = httpClient.execute(post);
}
catch(Exception ex)
{
String ee = ex.getMessage();
}
if(httpResponse.getStatusLine().getStatusCode() == 200)
{
String result = EntityUtils.toString(httpResponse.getEntity(), HTTP.UTF_8);
/* 擷取cookieStore
ASP.NET_SessionId就是通過上面的方法擷取到。
*/
CookieStore cookieStore = httpClient.getCookieStore();
List<Cookie> cookies = cookieStore.getCookies();
for(int i=0;i<cookies.size();i++){
if("ASP.NET_SessionId".equals(cookies.get(i).getName())){
JSESSIONID = cookies.get(i).getValue();
break;
}
}
return result;
}
return null;
}
android如何與asp.net服務端共用session