Как можно сохранять сессию после закрытия приложения?

207
04 июня 2021, 17:40

Я начал писать клиент для сайта.

Сначала нужно авторизоваться. А после можно пользоваться сайтом.

Я решил, что нужно использовать сессию, чтобы не авторизовываться каждый раз.

Как можно сохранять сессию даже после закрытия приложения?

Какие классы использовать для этого?

Answer 1

Есть два варианта простой и сложный но они оба связаны с использованием SharedPreferences:

  1. Простой - вы записываете в памяти устройства что пользователь был удачно залогинен, например будет переменная hasVisited. При удачном входе (пароль и логин верны) вы записываете в память устройства что переменная имеет значение true:

    sp = getSharedPreferences("app_data", 0)
    val editor = sp!!.edit()
    editor.putBoolean("hasVisited", true)
    editor.apply()
    

    и дальше в активности с которой стартует приложение мы проверяем эту переменную в функции onCreate:

    val hasVisited: Boolean = sp!!.getBoolean("hasVisited", false)
    if (hasVisited) {
      // переменная равно true и значит можно например через интент перейти на следующий экран
    } else {
      // переменная равна false и значит нужно ввести пароль и логин для авторизации
    }
    

вот вариант на java: в активности в методе onCreate нужно записать так:

sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

дальше при авторизации вам нужно будет класть переменную в память устройства:

SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean("hasVisited", true).commit;
  1. Второй способ: Создаем класс для работы с настройками приложения:

    public class Session {

    private SharedPreferences prefs;
    public Session(Context cntx) {
        // TODO Auto-generated constructor stub
        prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    }
    public void setusename(String usename) {
        prefs.edit().putString("usename", usename).commit();
    }
    public String getusename() {
        String usename = prefs.getString("usename","");
        return usename;
    }
    }
    

и дальше в активности его используем:

private Session session;//global variable 
session = new Session(cntx); //in oncreate 
//and now we set sharedpreference then use this like
session.setusename("USERNAME");

и дальше можно после сохранения пароля и логина их оттуда взять, например так:

session.getusename();

так же я вот есть приблизительный вариант функции выхода из аккаунта:

public  void logout(View view){
      SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
      SharedPreferences.Editor editor = sharedpreferences.edit();
      editor.clear();
      editor.commit();
   }

оба способа приблизительно одинаковы по исполнению, просто второй немного более запарный на мой взгляд. Надеюсь поможет :)

READ ALSO
getElementsByClassName + onclick на элемент полученной коллекции

getElementsByClassName + onclick на элемент полученной коллекции

Нужно чтобы при клике в браузере на слова "просто", "средне", "сложно" в div с классом result вставлялось значение + значение дата атрибутаСейчас...

242
Нахождение обьекта в WeakMap или WeakSet

Нахождение обьекта в WeakMap или WeakSet

Почему false? И как мне найти объект, если их будет много? Причем в Set() и Map() тоже самоеЕсли добавлять вместо объектов примитивные типы - то true

124