Android 保存用户会话

2 session android zend-framework login zend-auth

我是 android 新手我试图保存登录会话并在每次向服务器发送请求时发送它,我的网络服务是 PHP(Zend 框架 2)。

此代码用于识别用户:

$auth = Zend_Auth::getInstance();
$IdentityObj = $auth->getIdentity();
Run Code Online (Sandbox Code Playgroud)

可以像使用 Web 浏览器一样保存会话并发送它,而无需对我的 Web 服务进行任何更改。

Edw*_*fad 5

使用SharedPreferences是一种在 Android 中保存和检索键、值对数据的方法,也可以在整个应用程序中保持会话。

SharedPreferences您合作采取以下步骤:

  1. SharedPreferences通过向构造函数(字符串和整数)传递两个参数来初始化共享接口

    // 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用 Editor 接口及其方法来修改 SharedPreferences 值并存储数据以备将来检索

    //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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 检索数据:

    可以通过调用getString()(For string) 方法从保存的首选项中检索数据。请记住,应该在共享首选项上而不是在编辑器上调用此方法。

    // 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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 最后,在注销的情况下清除/删除数据

    如果您想从共享首选项remove(“key_name”)中删除,您可以调用删除该特定值。如果要删除所有数据,请调用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
    
    Run Code Online (Sandbox Code Playgroud)

如果您愿意,请点击此链接下载一个简单明了的示例:http : //www.androidhive.info/2012/08/android-session-management-using-shared-preferences/

另外,这是我使用的实现类:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,您必须SessionManageronCreate活动类的方法中创建此类的实例,然后调用createLoginSession将在整个应用程序中使用的会话

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

我希望它有帮助。