package cn.alphabets.light.network; import org.json.JSONException; import org.json.JSONObject; import java.util.Map; import cn.alphabets.light.model.GsonParser; import cn.alphabets.light.model.ModelUser; import cn.alphabets.light.setting.Default; import cn.alphabets.light.store.Eternal; import cn.alphabets.light.util.SharedData; /** * Session管理 * Created by luohao on 14/10/17. */ public class SessionManager { public static final String USER_INFO = "UserInfo"; private static String cookie; private static String csrf; public static void initialize(AuthJsonRequest request) { Map<String, String> handlers = request.getResponseHeaders(); setCookie(handlers.get(Default.ServerCookieName).split(";")[0]); setCsrf(handlers.get(Default.ServerCsrfName)); } public static String getCookie() { if (cookie != null) { return cookie; } // load cookie from SharedData cookie = SharedData.getInstance().get(Default.CookieName); if (cookie != null) { return cookie; } // Try to load a cookie from a file (SharedData data, sometimes lost?) cookie = Eternal.getString(Default.CookieName); return cookie; } public static void setCookie(String cookie) { if (cookie == null) { return; } if (SessionManager.cookie == null || !SessionManager.cookie.equals(cookie)) { SessionManager.cookie = cookie; SharedData.getInstance().push(Default.CookieName, cookie); Eternal.saveString(Default.CookieName, cookie); } } public static String getCsrf() { if (csrf != null) { return csrf; } return SharedData.getInstance().get(Default.CsrfName); } public static void setCsrf(String csrf) { if (csrf == null) { return; } if (SessionManager.csrf == null || !SessionManager.csrf.equals(csrf)) { SessionManager.csrf = csrf; SharedData.getInstance().push(Default.CsrfName, csrf); } } /** * 获取用户对象,从SharedPreferences里获取登陆时保存的用户数据 * 转换出错,或未能获取用户数据会返回空的ModUser对象 * @return 用户对象 */ public static ModelUser getUser() { // 获取保存的用户数据 String json = SharedData.getInstance().get(USER_INFO); if (json == null) { return null; } JSONObject user; try { user = new JSONObject(json); } catch (JSONException e) { return null; } GsonParser<ModelUser> modUser = GsonParser.fromJson(user, ModelUser.getTypeToken()); return modUser.getDetail(); } /** * 保存登陆用户信息 * @param response */ public static void saveUser(JSONObject response) { SharedData.getInstance().push(USER_INFO, response.toString()); } /** * 清除用户数据 */ public static void clearUser() { SharedData.getInstance().pop(USER_INFO); } }