Java 如何保持登录/维护cookie会话?
我正在开发一个android应用程序,它向服务器发送一个带有用户名和密码的post请求,我成功地得到了正确的响应。但是,当我尝试在登录后单击发送另一个post请求的按钮时,我从服务器收到一条消息,说我没有登录。我知道这和储存饼干有关,有人能帮我吗?以下是html客户端代码:Java 如何保持登录/维护cookie会话?,java,android,http-post,session-cookies,setcookie,Java,Android,Http Post,Session Cookies,Setcookie,我正在开发一个android应用程序,它向服务器发送一个带有用户名和密码的post请求,我成功地得到了正确的响应。但是,当我尝试在登录后单击发送另一个post请求的按钮时,我从服务器收到一条消息,说我没有登录。我知道这和储存饼干有关,有人能帮我吗?以下是html客户端代码: public class SimpleHttpClient { private static HttpClient mHttpClient; private static HttpClient ge
public class SimpleHttpClient {
private static HttpClient mHttpClient;
private static HttpClient getHttpClient() {
if (mHttpClient == null) {
mHttpClient = new DefaultHttpClient();
final HttpParams params = mHttpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);
ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);
}
return mHttpClient;
}
public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception {
BufferedReader in = null;
try {
HttpClient client = getHttpClient();
HttpPost request = new HttpPost(url);
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
String result = sb.toString();
return result;
}
finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
公共类SimpleHttpClient{
专用静态HttpClient mHttpClient;
私有静态HttpClient getHttpClient(){
if(mHttpClient==null){
mHttpClient=新的DefaultHttpClient();
最终HttpParams params=mHttpClient.getParams();
setConnectionTimeout(参数,HTTP_超时);
HttpConnectionParams.setSoTimeout(参数,HTTP_超时);
setTimeout(参数,HTTP_超时);
}
返回mHttpClient;
}
公共静态字符串executeHttpPost(字符串url、ArrayList后参数)引发异常{
BufferedReader in=null;
试一试{
HttpClient=getHttpClient();
HttpPost请求=新的HttpPost(url);
UrlEncodedFormEntity formEntity=新的UrlEncodedFormEntity(后参数);
请求。setEntity(formEntity);
HttpResponse response=client.execute(请求);
in=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
StringBuffer sb=新的StringBuffer(“”);
字符串行=”;
字符串NL=System.getProperty(“line.separator”);
而((line=in.readLine())!=null){
sb.追加(行+NL);
}
in.close();
字符串结果=sb.toString();
返回结果;
}
最后{
if(in!=null){
试一试{
in.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}
不久前我也遇到了同样的问题。您可以在CookieStore中序列化Cookies,并在登录时将其保存在某处。
httpclient.execute(//login);
CookieStore cookieStore = httpclient.getCookieStore();
saveCookieData(cookieStore);
在发出post请求之前,将其反序列化,并将其设置为http客户端
httpclient.setCookieStore(retrieveCookieStore());
什么是getCookieStore()和SaveCookieStore()?DefaultHttpClient有一个方法getCookieStore(),该方法返回一个CookieStore,其中包含服务器返回的Cookie列表。关于方法SaveCookieStore()和retrieveCookieStore(),我把它们放在那里作为一个例子,你必须实现它们。在我的例子中,我的应用程序有一个数据库,所以我只是在那里添加了信息。你基本上可以在任何地方将其保存为字符串。