PHP服务身份验证通常使用Session功能。
第一次请求,请求头不包含cookie数据,在PHP返回消息之前,使用session_start() 函数,返回set-cookie数据中就会包含PHPSESSID(这个表示服务器端为这个session分配的一个cookie值),
如,返回cookie包括:Set-Cookie: PHPSESSID=7be0caefe3073d4075ac842d8df56be8; path=/; HttpOnly
这时将这个PHPSESSID字段值保存起来(无论是一个临时变量或是存储成文件)
第二次请求,将保存的PHPSESSID字段值设置为请求头的cookie的PHPSESSID值,那么第二次请求就可以使用第一次请求时服务端保存的session数据了。
如,请求cookie包括:PHPSESSID=7be0caefe3073d4075ac842d8df56be8
以下是HttpClient类使用Get方法如何设置管理cookie。
首先声明一个字符串型成员变量 String mSESSIONID=“”;用来保存临时cookie的PHPSESSID值。
String url = "http://1.vini.sinaapp.com/app/check.php?action=CheckCode&InputCode=" + inputCode;
HttpGet httpGet = new HttpGet(url);
DefaultHttpClient httpClient = new DefaultHttpClient();
try {
// 如果mSESSIONID值存在,设置请求头的Cookie的Session字段
if("" != mSESSIONID){
httpGet.setHeader("Cookie", "PHPSESSID=" + mSESSIONID);
}
//执行连接
HttpResponse httpResponse = httpClient.execute(httpGet);
//获取并保存Cookie的Session字段
CookieStore mCookieStore = httpClient.getCookieStore();
List<Cookie> cookies = mCookieStore.getCookies();
for (int i = 0; i < cookies.size(); i++) {
if ("PHPSESSID".equals(cookies.get(i).getName())) {
mSESSIONID = cookies.get(i).getValue();
break;
}
}
//获取结果
if(httpResponse.getStatusLine().getStatusCode()==200){
return EntityUtils.toString(httpResponse.getEntity());
}
else{
return String.valueOf(httpResponse.getStatusLine().getStatusCode());
}
} catch (IOException e) {
e.printStackTrace();
return e.getMessage();
}