即使在应用程序关闭或通过按下android中的菜单按钮放入后台后,如何在Android中持久存储cookie?

时间:2016-07-26 19:31:39

标签: android cookies session-cookies cookiestore

您好先生我是Android的新手,并且想要一直坚持使用Cookie,直到用户点击signout.but present我使用默认的Cookiemanger,在几个小时后删除Cookie,我的应用程序变得没有响应,因此应用程序无法进行进一步的身份验证调用服务器以获取数据和应用程序死亡。

我见过许多代码并使用cookie存储来保持cookie活着但是我失败了。我无法理解编写代码的位置,这样每次我调用服务器时,cookie都会自动转到服务器。

这是我的代码:

public class PersistentCookieStore implements CookieStore {

/**
 * The default preferences string.
 */
private final static String PREF_DEFAULT_STRING = "";

/**
 * The preferences name.
 */
private final static String PREFS_NAME = PersistentCookieStore.class.getName();

/**
 * The preferences session cookie key.
 */
private final static String PREF_SESSION_COOKIE = "session_cookie";

private CookieStore mStore;
private Context mContext;

/**
 * @param context The application context
 */
public PersistentCookieStore(Context context) {
    // prevent context leaking by getting the application context
    mContext = context.getApplicationContext();

    // get the default in memory store and if there is a cookie stored in shared preferences,
    // we added it to the cookie store
    mStore = new CookieManager().getCookieStore();
    String jsonSessionCookie = getJsonSessionCookieString();
    if (!jsonSessionCookie.equals(PREF_DEFAULT_STRING)) {
        Gson gson = new Gson();
        HttpCookie cookie = gson.fromJson(jsonSessionCookie, HttpCookie.class);
        mStore.add(URI.create(cookie.getDomain()), cookie);
    }
}

@Override
public void add(URI uri, HttpCookie cookie) {
    if (cookie.getName().equals("sessionid")) {
        // if the cookie that the cookie store attempt to add is a session cookie,
        // we remove the older cookie and save the new one in shared preferences
        remove(URI.create(cookie.getDomain()), cookie);
        saveSessionCookie(cookie);
    }

    mStore.add(URI.create(cookie.getDomain()), cookie);
}

@Override
public List<HttpCookie> get(URI uri) {
    return mStore.get(uri);
}

@Override
public List<HttpCookie> getCookies() {
    return mStore.getCookies();
}

@Override
public List<URI> getURIs() {
    return mStore.getURIs();
}

@Override
public boolean remove(URI uri, HttpCookie cookie) {
    return mStore.remove(uri, cookie);
}

@Override
public boolean removeAll() {
    return mStore.removeAll();
}

private String getJsonSessionCookieString() {
    return getPrefs().getString(PREF_SESSION_COOKIE, PREF_DEFAULT_STRING);
}

/**
 * Saves the HttpCookie to SharedPreferences as a json string.
 *
 * @param cookie The cookie to save in SharedPreferences.
 */
private void saveSessionCookie(HttpCookie cookie) {
    Gson gson = new Gson();
    String jsonSessionCookieString = gson.toJson(cookie);
    SharedPreferences.Editor editor = getPrefs().edit();
    editor.putString(PREF_SESSION_COOKIE, jsonSessionCookieString);
    editor.apply();
}

private SharedPreferences getPrefs() {
    return mContext.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
}

}

之后我使用此代码:

 CookieManager cookieManager = new CookieManager(
 new PersistentCookieStore(mContext), CookiePolicy.ACCEPT_ORIGINAL_SERVER);
 CookieHandler.setDefault(cookieManager);

在我关于create方法的启动器活动中,它第一次运行良好..但是在背景中将应用程序离开一两个小时后,它会释放cookie并请求不要因为身份验证而发送到服务器。

如此善意地建议我添加此代码或处理持久性cookie的最佳方法的正确位置或活动。 在高级

中可以理解Ant帮助

0 个答案:

没有答案