Android : Storing session cookie to maintain log in session

on Wednesday, August 13, 2014


I've been trying to get this work for a while now. Im working on an app where the user signs in with a username and password which uses a httppost request to post to the server. i get the correct response, and during the post i store the session cookie that the server gives me. (I store it in a cookie store) But when i try to click a link on the menu ( which does a second http post) after i logged in, the servers gives me a message saying that i am not logged in. But i send the cookie that i recieved in the first post to the server in the second post, yet the server does not recognize that i am logged in. To test this more easily i used the chrome plug in "Postman" which lets you post to websites easily. The only time it worked was when i log in to the website using chrome then use Postman to do the second post, which successfully gives me a response. however, when i use Postman to log in, then also use postman to attempt the second post , again, "Not logged in". Im guessing that the cookie is not being stored properly in the app. How could i go about fixing this? I read some stuff about storing the cookies in something called "Shared Preferences", is that possibly a fix? If so, what is it and how could i store the cookies there?



public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception {
BufferedReader in = null;
try {

LoginLayout.httpClient = new DefaultHttpClient();
HttpPost request = new HttpPost(url);



UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);


CookieStore cookiestore = LoginLayout.httpClient.getCookieStore();

HttpResponse response = LoginLayout.httpClient.execute(request);



List<Cookie> cookies = LoginLayout.httpClient.getCookieStore().getCookies();



cookiestore.addCookie(cookie);
cookie = cookies.get(0);
cookieValue = "ASPSESSIONIDCQTCRACT=" + cookiestore.getCookies();
System.out.println("The cookie" + cookieValue);
List<Cookie> cookiess = cookiestore.getCookies();
cookiee = cookies.get(0);




Header[] headers = response.getAllHeaders();
System.out.println("length" + headers.length);
for (int i=0; i < headers.length; i++) {

Header h = headers[i];

System.out.println( "Header names: "+h.getName());
System.out.println( "Header Value: "+h.getValue());
}



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();

// System.out.println( mCookie);

String result = sb.toString();
return result;

}
finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }


Here is the getter so i can access the cookie from the cookie store in the next activity



public static String getCookie(){




return cookiee.getName() +"="+cookiee.getValue();

}


Here is the second post where i try to retrieve the stored cookie, which it seems to do sucessfully, however the server doesnt recognize i am logged in



public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception {
BufferedReader in = null;
try {




HttpPost request = new HttpPost(url);


request.setHeader("Cookie", LoginLayout.getCookie());

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);


HttpResponse response = LoginLayout.httpClient.execute(request);



Header[] headers = response.getAllHeaders();
System.out.println("length" + headers.length);
for (int i=0; i < headers.length; i++) {

Header h = headers[i];

System.out.println( "Header names: "+h.getName());
System.out.println( "Header Value: "+h.getValue());
}

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();

//System.out.println( mCookie);

String result = sb.toString();
return result;

}
finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

0 comments:

Post a Comment