Android save user session

user3560669 picture user3560669 · May 18, 2014 · Viewed 14k times · Source

I'm new in android I'm trying to save login session and send it with every time I send request to server, My web service is PHP (Zend framework 2).

This code to identify user:

$auth = Zend_Auth::getInstance();
$IdentityObj = $auth->getIdentity();

It's possible save session and send it like I use web browser without make any change in my web service.

Answer

Edwinfad picture Edwinfad · Nov 21, 2016

Using SharedPreferences is a way to save and retrieve key, value pair data in Android and also to keep session all throughout the entire application.

To work with SharedPreferences you to take the following steps:

  1. Initialization of the share SharedPreferences interface by passing two arguments to the constructor (String and integer)

    // Sharedpref file name
    private static final String PREF_NAME = "PreName";
    // Shared pref mode
    int PRIVATE_MODE = 0;
    //Initialising the SharedPreferences
    SharedPreferences pref = getApplicationContext()
            .getSharedPreferences("MyPref", 0); // 0 - for private mode
    
  2. Using Editor interface and its methods to modify the SharedPreferences values and for storing data for future retrieval

    //Initialising the Editor
    Editor editor = pref.edit();
    editor.putBoolean("key_name", true); // Storing boolean - true/false
    editor.putString("key_name", "string value"); // Storing string
    editor.putInt("key_name", "int value"); // Storing integer
    editor.putFloat("key_name", "float value"); // Storing float
    editor.putLong("key_name", "long value"); // Storing long     
    editor.commit(); // commit changes
    
  3. Retrieving Data:

    Data can be retrieved from saved preferences by calling getString() (For string) method. Remember this method should be called on Shared Preferences not on Editor.

    // returns stored preference value
    // If value is not present return second param value - In this case null
    pref.getString("key_name", null); // getting String
    pref.getInt("key_name", null); // getting Integer
    pref.getFloat("key_name", null); // getting Float
    pref.getLong("key_name", null); // getting Long
    pref.getBoolean("key_name", null); // getting boolean
    
  4. Finally, Clearing / Deleting Data like in the case of logout

    If you want to delete from shared preferences you can call remove(“key_name”) to delete that particular value. If you want to delete all the data, call clear()

    editor.remove("name"); // will delete key name
    editor.remove("email"); // will delete key email
    
    editor.commit(); // commit changes
    
    //Following will clear all the data from shared preferences
    editor.clear();
    editor.commit(); // commit changes
    

If you wish, follow this link to download a simple and straightforward example: http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/

Also, this is the implementation class I use:

import java.util.HashMap;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class SessionManager {
    // Shared Preferences
    SharedPreferences pref;
    // Editor for Shared preferences
    Editor editor;
    // Context
    Context _context;
    // Shared pref mode
    int PRIVATE_MODE = 0;
    // Sharedpref file name
    private static final String PREF_NAME = "AndroidHivePref";
    // All Shared Preferences Keys
    private static final String IS_LOGIN = "IsLoggedIn";
    // User name (make variable public to access from outside)
    public static final String KEY_NAME = "name";
    // Email address (make variable public to access from outside)
    public static final String KEY_EMAIL = "email";

    // Constructor
    @SuppressLint("CommitPrefEdits")
    public SessionManager(Context context) {
        this._context = context;
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = pref.edit();
    }

    /**
     * Create login session
     */
    public void createLoginSession(String name, String email) {
        // Storing login value as TRUE
        editor.putBoolean(IS_LOGIN, true);
        // Storing name in pref
        editor.putString(KEY_NAME, name);
        // Storing email in pref
        editor.putString(KEY_EMAIL, email);
        // commit changes
        editor.commit();
    }

    /**
     * Check login method wil check user login status If false it will redirect
     * user to login page Else won't do anything
     */
    public void checkLogin() {
        // Check login status
        if (!this.isLoggedIn()) {
            // user is not logged in redirect him to Login Activity
            Intent i = new Intent(_context, MainActivity.class);
            // Closing all the Activities
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            // Add new Flag to start new Activity
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            // Staring Login Activity
            _context.startActivity(i);
        }

    }

    /**
     * Get stored session data
     */
    public HashMap<String, String> getUserDetails() {
        HashMap<String, String> user = new HashMap<String, String>();
        // user name
        user.put(KEY_NAME, pref.getString(KEY_NAME, null));

        // user email id
        user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));

        // return user
        return user;
    }

    /**
     * Clear session details
     */
    public void logoutUser() {
        // Clearing all data from Shared Preferences
        editor.clear();
        editor.commit();

        // After logout redirect user to Loing Activity
        Intent i = new Intent(_context, MainActivity.class);
        // Closing all the Activities
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        // Add new Flag to start new Activity
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        // Staring Login Activity
        _context.startActivity(i);
    }

    /**
     * Quick check for login
     **/
    // Get Login State
    public boolean isLoggedIn() {
        return pref.getBoolean(IS_LOGIN, false);
    }
}

Finally, you will have to create an instance of this SessionManager class in the onCreate method of your activity class and then call the createLoginSession for the session that will be used throughout the entire app

// Session Manager Class
SessionManager session;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Session Manager
    session = new SessionManager(getApplicationContext());
    session.createLoginSession("Username", intentValue);
}

I hope it helps.