Skocz do zawartości
xt4z

Wątek o sesji i ciasteczek - Android - Web Server

    Rekomendowane odpowiedzi

    xt4z

    Witajcie,

    Chciałbym poruszyć wątek, z którym od wczoraj walczę, zebrać trochę Waszych opinii, doświadczeń, ustalić najlepszą metodykę w obrębie poradzenia sobie z tego typu problematyką.

    Napisałem aplikację, która posiada funkcjonalność rejestracji/logowania, odbywa się tak (pseudo kod):

    SignUp.java -> sendAuth() -> Apache (PHP)

    Po stronie androida zbieram dane do paska REQUEST (pomijam aspekty bezpieczeństwa, tego co lepsze, GET, POST, trala), układam go w zmienne, szyfruje hasło sha256 z inputa, base-uję cały pasek i pcham do serwera z wykorzystaniem HttpUrlConnection. Po stronie PHP index dekoduje sobie pasek, rozbiera parametry, dodatkowo pokrywa sh256 sha1 z saltem i ładuje do bazy.

    Teraz moje pytanie brzmi, jak rozwiązujecie problem sesyjności i ciastek? Widziałem, że grom ludzi po prostu korzysta z WebView, ale ja uważam, że jeśli to jest aplikacja na Android, to ma to być komponentami Androida rozwiązane i pewnie support dla ciastek jest. Widziałem trochę implementacji opartych o ciastka, ale żadne nie wyczerpywały znamion moich potrzeb implementacyjnych.

    Rozumiem, że aplikacja Android w odpowiedzi na zapytanie do index.php dostanie identyfikator ciastka, musi go gdzieś przechowywać i za każdym następnym strzałem do tego indexu w ramach tego identyfikatora wysłać je ponownie, aby index wiedział że ta sesja jest wciąż aktualna. W przypadku zamknięcia wszystkich aktywności, czyli wyłączenia programu, factory traciłoby ciastko.

    Ktoś podrzuci jakiś pomysł?

    ---------- Post dołączono o 00:01 ---------- Poprzedni post napisano o 23:47 ----------

    Myślałem o tym, aby przy kilku określonych czynnościach w obrębie życia programu robić po prostu update do bazy danych z ostatnią czynnością/aktywnością (lastactivity), ale boję się trochę o testy wydajnościowe... nie chciałbym aby mi co chwile 150 tys. ludzi robiło udpate na mysqlu, nawet sklastrowanym.

    ---------- Post dołączono o 00:33 ---------- Poprzedni post napisano o 00:01 ----------

    Dobra, mam kilka newsów:

    Po stronie PHP (ustawiłem zapisywanie sesji do pliku dla testów, docelowo do bazy poleci):

    ini_set("session.save_path", '/testy/sesje');
    ini_set("session.cookie_secure", 'Off');
    ini_set("session.bug_compat_42", 'Off');
    ini_set("session.bug_compat_warn", 'Off');
    ini_set("session.gc_maxlifetime", 1440);
    ini_set("session.name", 'APPSESSID');
    
    session_name('aplikacja');
    session_start();
    $APPSESSID = $_COOKIE['aplikacja'];
    

    Po stronie Javy:

    import java.io.*;
    import java.net.*;
    import java.util.*;
    
    public class Fetch {
     public static void main(String args[]) throws Exception {
       Console console = System.console();
       if (args.length == 0) {
         System.err.println("URL missing");
         System.exit(-1);
       }
       String urlString = args[0];
       CookieManager manager = new CookieManager();
       manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
       CookieHandler.setDefault(manager);
       URL url = new URL(urlString);
       URLConnection connection = url.openConnection();
       Object obj = connection.getContent();
       url = new URL(urlString);
       connection = url.openConnection();
       obj = connection.getContent();
       CookieStore cookieJar = manager.getCookieStore();
       List cookies = cookieJar.getCookies();
    
       int i = 0;
    
       while (i < cookies.size())
      {
    	  System.out.println( cookies.get(i) );
    	  i++;
      }
    
     }
    }

    Odpaliłem kod z parametrem strony, np. "http://du*a.pl/"

    Rezultat:

    aplikacja=1f9355d035769ec0f075aacf10c504ea

    Czyli sesje wracają prawidłowo, teraz tylko muszę przemyśleć jak tym zarządzać w kontekście pracy użytkownika będącego zalogowanym. PHP posiada garbage collector, który wymiata sesje z określonym w php.ini interwałem czasowym. Także sesjami się nie trzeba martwić. Można mu napisać też procedury wymiatania tego z bazy, więc aktualnie zalogowanych użytkowników mógłbym przy pobieraniu listy z ich loginami fetchować na podstawie indeksowanej tabeli bazy danych z sesjami, gdyż sesje te wskazywały by na to że ludek jest dostępny.

    Edytowane przez xt4z

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x