我正在学习更多关于SharedPreferences的知识,并想了解每件事到底是如何工作的.我已经看了相当多的视频,但我仍然有一些问题.
- 当用户登录时,我使用UUID生成一个随机会话ID.然后,我为用户分配他们的会话ID,并通过将UserModel传递给处理SharedPreferences的SessionManagement实例来保存会话.
userModel.setSessionId(UUID.randomUUID().toString());
SessionManagement sessionManagement = new SessionManagement(LoginActivity.this);
sessionManagement.saveSession(userModel);
- 当用户关闭/打开应用程序时,将调用onStart().它创建SessionManagement的另一个实例,并使用getSession()判断会话是否为空,以确定它们是否已登录.
SessionManagement sessionManagement = new SessionManagement(LoginActivity.this);
if (sessionManagement.getSession() != null) {
// go to some activity
}
下面是SessionManagement构造函数的外观:
private SharedPreferences sharedPreferences;
private final SharedPreferences.Editor editor;
private MasterKey masterKey;
//private String SHARED_PREF_NAME = "session";
private final String SESSION_KEY = "session_user";
private final String SESSION_USERNAME = "session_username";
public SessionManagement(Context context) {
try {
masterKey = new MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build();
} catch (GeneralSecurityException | IOException e) {
e.printStackTrace();
}
try {
sharedPreferences = EncryptedSharedPreferences.create(
context,
"secret_shared_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
} catch (GeneralSecurityException | IOException e) {
e.printStackTrace();
}
//sharedPreferences = context.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
}
我现在的问题是,如果我只是判断会话是否为空,SharedPreferences如何知道会话ID对应于在步骤1中初始化它的用户?
人们有哪些方法来解决SharedPreferences实现可以防止的弱/expose 的会话ID?
我的实施/流程是否正确?
将会话ID保存到用户模型是否安全?
我很感激在这个话题上能得到的任何帮助!