Projektowanie aplikacji mobilnej łączącej się z serwerem

0

Hej!
Na wstępie chciałbym zaznaczyć że nie wiem czy dobry dział wybrałem bo pytam się w penwych momentach konkretnie o język PHP jednak najważniejsza jest dla mnie odpowiedź czy tak w ogóle powinno to wyglądać ;) Do rzeczy tworzę aplikacje na telefony (android) która musi łączyć się z serwerem WWW i pobierać pewne dane. Każdy użytkownik aplikacji będzie mieć oddzielne konto na serwerze. Według mnie komunikacja powinna wyglądać tak:

  1. Użytkownik po włączeniu apki musi się zalogować (ew. logowanie z automatu ale tak czy siak wyślę dane do serwera). Aplikacja łączy się ze skryptem "login.php" i za pomocą post przesyła dane takie jak login i hasło.
  2. Jeżeli dane się zgadzają to serwer dodaje info do sesji.
  3. Aplikacja na telefonie użytkownika może się łączyć z odpowiednimi skryptami na serwerze np. info.php które pobierają odpowiednie dla danego konta dane i wypisują je.

Czy to jest sensowne podejście do tematu? Rozumiem że łączenie się do mySQL z poziomu aplikacji jest głupotą (łatwość wycieku haseł do bazy danych). Teraz zastanawiam się jak ogarnąć ten mechanizm sesji i czy w ogóle PHP jest odpowiednim językiem do rozwiązania tego po stronie serwera? (celuję w dużą ilość użytkowników :D). Podczas logowania zapisałbym sobie do sesji ID użytkownika. Ale jak ustawić ilość minut po których użytkownik zostanie wywalony (np. wyłączy aplikacje i będzie czasu na wylogowanie). Kolejne pytanie: podczas wywoływania innych plików na serwerze wymagających wcześniejszego zalogowania (np. ten info.php) muszę podawać w GET identyfikator sesji, tak? Ja widzę to tak że po zalogowaniu zwracam identyfikator i potem wysyłam go jako parametr. (niby można by się bawić w ciastka, tak jak to robią przeglądarki ale myślę że nie ma sensu). Czy logowanie takie jakie przedstawiłem jest wystarczająco bezpieczne czy może zastosować jakieś połączenie szyfrowane (jakie? shtml)
Proszę o pomoc i pozdrawiam :)

0

nie prościej pokazać po prostu stronę??? A jeśli bardzo chcesz aplikację to WebService po stronie serwera i klient w javie po stronie telefonu

0

Nie, bo potrzebuje operować na tych danych cały czas (przetwarzać je w jakiś sposób) a poza tym nie było by to zgodne z resztą interfejsu (chyba że faktycznie działają tak inne aplikacje tego typu o_O) bo niby można by spróbować to dopasować.

0

Do rzeczy tworzę aplikacje na telefony (android) która musi łączyć się z serwerem WWW i pobierać pewne dane. Każdy użytkownik aplikacji będzie mieć oddzielne konto na serwerze. Według mnie komunikacja powinna wyglądać tak:

  1. Użytkownik po włączeniu apki musi się zalogować (ew. logowanie z automatu ale tak czy siak wyślę dane do serwera). Aplikacja łączy się ze skryptem "login.php" i za pomocą post przesyła dane takie jak login i hasło.
  2. Jeżeli dane się zgadzają to serwer dodaje info do sesji.
  3. Aplikacja na telefonie użytkownika może się łączyć z odpowiednimi skryptami na serwerze np. info.php które pobierają odpowiednie dla danego konta dane i wypisują je.

Dość normalne. Serwer powinien mieć skrypty przystosowane tylko dla aplikacji mobilnej, gdzie dane są zwracane w postaci JSON lub czegoś podobnego, aby zminimalizować ilość przesyłanych danych.

Teraz zastanawiam się jak ogarnąć ten mechanizm sesji i czy w ogóle PHP jest odpowiednim językiem do rozwiązania tego po stronie serwera?

Zapisuj informacje o sesji w bazie danych, przekaż identyfikator sesji aplikacji i aplikacja będzie używać tylko identyfikatora sesji przy następnych połączeniach, np. przekazując go w query stringu. PHP jest wyborem równie dobrym jak inne języki. Nie wiem ile to dla ciebie "duża ilość użytkowników", ale odpowiednia optymalizacja skryptów zaszkodzi.

Ale jak ustawić ilość minut po których użytkownik zostanie wywalony (np. wyłączy aplikacje i będzie czasu na wylogowanie).

A nie możesz wylogowywać użytkownika, kiedy zamknie swoją aplikację mobilną?

Kolejne pytanie: podczas wywoływania innych plików na serwerze wymagających wcześniejszego zalogowania (np. ten info.php) muszę podawać w GET identyfikator sesji, tak? Ja widzę to tak że po zalogowaniu zwracam identyfikator i potem wysyłam go jako parametr. Czy logowanie takie jakie przedstawiłem jest wystarczająco bezpieczne czy może zastosować jakieś połączenie szyfrowane (jakie? shtml)

Tak, możesz używać w ten sposób. Logowanie jest niebezpieczne z uwagi na przechwycenie identyfikatora sesji. Szyfrowanie połączenia może temu zapobiec. Nie ma czegoś takiego jak SHTML, jest HTTPS. Allegro WebAPI np. zwraca identyfikator sesji, którym należy się posługiwać dalej.
Zasadniczo, możesz też użyć ciasteczek, ich obsługa w np. .NET jest dość prosta.

Dodatkowo:

  • Sporo aplikacji mobilnych działa na API w postaci REST - możesz przemyśleć taką architekturę,
  • coraz częściej w aplikacji mobilnej w ogóle nie używa się nazwy użytkownika i hasła, ale aplikacja używa OAuth - który tez polega na wysyłaniu w żądaniu HTTP specjalnego nagłówka,
  • możesz przemyśleć WebService (np. SOAP) zamiast REST,
  • możesz nawet przemyśleć wyrzucenie HTTP na rzecz np. XMPP (jak to robią niektóre z usług Google) lub innego własnego protokołu w oparciu o TCP/IP,
  • http://devpytania.pl/question[...]obilnego-klienta-w-przyszosci,
  • http://stackoverflow.com/ques[...]s-twitter-flickr-facebook-etc
0

Wielkie dzięki za odpowiedź.
"Nie ma czegoś takiego jak SHTML, jest HTTPS." Oczywiście, tak to jest jak się pisze jedno a myśli coś innego ;)
"A nie możesz wylogowywać użytkownika, kiedy zamknie swoją aplikację mobilną?" No mogę :D ale lepiej się zabezpieczyć się i automatycznie wywalać użytkownika jeżeli nic nie robi bo mógł się telefon zwiesić np.
Przemyślałem sprawę i nie będę używać JSONA bo będę pobierał/wysyłał naprawdę proste dane (plain text + jakies tam separatory). Co do tego uwierzytelniania to nie wiem dokładnie jak mam to zrobić. Zapisywać w bazie danych identyfikator sesji i id użytkownika zalogowanego (+ew. jakiś timestamp) (wtedy nie będę musiał posługiwać się mechanizmem sesji w ogóle) czy jakoś to połączyć z sesjami? Czy nie ma sposobu żeby posłużyć się mechanizmem sesji jeżeli id sesji nie będzie wysyłane w ciastkach (tylko jako parametr GET np.)?

Okej chyba ogarnąłem jak mam to zrobić ale nie widzę sensu. Przecież mogę podać SSID jako GET i serwer powinien to ogarnąć.

0

Mam wrażenie, że nie ma różnicy czy wysyłasz identyfikator sesji w ciastku, czy w parametrze GET - serwer musi tylko wziąć SID z odpowiedniego miejsca, potem sprawa leci identycznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0