In my application, I send a POST request to the server and get a response from the server. And from the answer I collect different cookies, user information. Therefore, I send a login request and receive cookies after the server responds in order to save the login. On Android 4.3 and below, I get cookies that are great and the user logs have completed successfully. But in Android 4.4, the user logs in successfully, but the cookie is not accepted.
Android has changed something important for this? Here is my code below if anyone has any suggestions.
private URL urlObj; private HttpURLConnection connection; private DataOutputStream dataOs; private ArrayList<String> schools; private ArrayList<Post> schoolPosts; private String schoolID; private String name; private String userLoginCookie, sessionSeedCookie, sessionUidCookie, sPrefCookie; private Context context; private CookieStore store; public DataParser(Context _context) { context = _context; } //First call whenever connecting across the user network private void establishConnection() throws IOException { urlObj = new URL(url); connection = (HttpURLConnection) urlObj.openConnection(); CookieManager cookieManager = new CookieManager(); cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); CookieHandler.setDefault(cookieManager); store = cookieManager.getCookieStore(); getCookies(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); connection.setRequestProperty("Cookie", sessionSeedCookie+";"+sessionUidCookie+";"+userLoginCookie+";"+sPrefCookie); connection.setDoOutput(true); connection.setUseCaches(false); dataOs = new DataOutputStream(connection.getOutputStream()); } //Called after communication is complete private void disconnectAll() throws IOException { connection.disconnect(); dataOs.close(); } private void getCookies() { SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); userLoginCookie = settings.getString(USER_LOGIN, BLANK); Log.d(LOG, "Cookie: "+userLoginCookie); sessionSeedCookie = settings.getString(SESS_SEED, BLANK); Log.d(LOG, "Cookie: "+sessionSeedCookie); sessionUidCookie = settings.getString(SESS_UID, BLANK); Log.d(LOG, "Cookie: "+sessionUidCookie); sPrefCookie = settings.getString(S_PREF, "sPref="+BLANK); Log.d(LOG, "Cookie: "+sPrefCookie); } private void updateCookies() { SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); List<HttpCookie> cookieList = store.getCookies(); for(int i=0; i<cookieList.size(); i++) { if(cookieList.get(i).getName().equals(USER_LOGIN)) editor.putString(USER_LOGIN, cookieList.get(i).toString()); else if(cookieList.get(i).getName().equals(SESS_SEED)) editor.putString(SESS_SEED, cookieList.get(i).toString()); else if(cookieList.get(i).getName().equals(SESS_UID)) editor.putString(SESS_UID, cookieList.get(i).toString()); else Log.d(LOG, "Found Extra Cookie: "+cookieList.get(i).getName()); } sPrefCookie = settings.getString(S_PREF, "sPref="+BLANK); editor.commit(); //Save changes to the SharedPreferences } //Logins User into Walkntrade public String login(String email, String password) throws IOException { establishConnection(); //Instantiate all streams and opens the connection String query= "intent=login&password="+password+"&email="+email+"&rememberMe=true"; dataOs.writeBytes(query); Log.d(LOG, "" + connection.getResponseCode()); updateCookies(); String response = readInputAsString(connection.getInputStream()); Log.d(LOG, "Connection Status: "+response); disconnectAll(); return response; } //Logs user out of Walkntrade public void logout() throws IOException { establishConnection(); String query = "intent=logout"; dataOs.writeBytes(query); Log.d(LOG, "" + connection.getResponseCode()); updateCookies(); disconnectAll(); } //Returns user login status public static boolean isUserLoggedIn(Context _context) { SharedPreferences settings = _context.getSharedPreferences(PREFS_NAME, 0); boolean isUserLoggedIn = settings.getBoolean(DataParser.CURRENTLY_LOGGED_IN, false); return isUserLoggedIn; } public String getUserName() throws IOException{ establishConnection(); String query = "intent=getUserName"; dataOs.writeBytes(query); Log.d(LOG, ""+connection.getResponseCode()); updateCookies(); String response = readInputAsString(connection.getInputStream()); disconnectAll(); return response; } public String getUserAvatar() throws IOException { establishConnection(); String query = "intent=getAvatar"; dataOs.writeBytes(query); Log.d(LOG, ""+connection.getResponseCode()); updateCookies(); String response = readInputAsString(connection.getInputStream()); disconnectAll(); return response; }
android cookies android-4.4-kitkat
user3457562 Mar 24 '14 at 23:40 2014-03-24 23:40
source share