Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX] Logowanie alternatywne
Forum PHP.pl > Forum > PHP
Mephis
Witam.

Nie wiedziałem za bardzo w którym dziale napisać ten temat, przepraszam za ewentualny kłopot.

Na stronie chciałbym zrobić logowanie przy pomocy AJAX. Z samym logowaniem problemu nie ma. Problem zaczyna się, gdy użytkownik ma wyłączoną obsługę JavaScript - albowiem uniemożliwia to logowanie. Pozostawiam więc Ajaxa jak i cały JS tylko w celu zachowania na stronie dynamiki i ewentualnie dodatkowych 'efektów graficznych' interfejsu (jQueru) użytkownikom, którzy mają włączone JS. Cała reszta będzie się mogła obejść i bez tego.

Została sama kwestia logowania w sposób dynamiczny czy też nie. Pierwsze co wpadło mi do głowy, to:
- do formularza, z którego będzie logował się użytkownik, dodać niewidoczne pole typu hidden z domyślną wartością "noajax".
  1. <input type="hidden" value="noajax" id="action" name="action" />

- w skrypcie js, dodać do danych POST zmienną "action" z wartościa "ajax"
  1. var string = '&login=' + login + '&password=' + password + '&action=ajax';

Działanie jest proste - wprzypadku braku js, zmienna action wyśle się jako "noajax". W przeciwnym wypadku zmienna ta zostanie zastąpiona przy pomocy JS na wartość "ajax". Jestem świadomy możliwości manipulacji polem action w formularzu i doprowadzenia do "rzekomego" dynamicznego logowania.

W ten sposób, mogę sprawdzić w skrypcie PHP, jakim sposobem wysłano formularz. Pytanie mam następujące:
czy takie rozwiązanie jest bezpieczne i jakie jest na to bardziej profesjonalne rozwiązanie?
Pyton_000
A na co ? Przecież dynamicznie i statycznie odwołujesz się do tego samego skryptu logowania.
Jak robisz ajaxem to robisz zapewne preventDefault, potem obsługa, pierdoły, animacje itp.

Jak robisz ręcznie wciskasz "Loguj" i tyle.
A w PHP sprawdzasz czy przyszedł AJAX:
  1. if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  2. }

i robisz albo redirect albo die;
Mephis
Owszem, skrypt logowanie jest ten sam. W nim stawiam warunek czy $_POST['action'] jest "ajax" lub "noajax". W przypadku ajax, ze skryptu logowania wypuszczam dane przez "echo json_encode($dane);", zaś w przypadku noajax, muszę zainicjować komunikat o ewentualnym błędzie i zrobić przekierowanie do strony z logowaniem.

Z tego co rozumiem, ten warunek mam wstawić zamiast sprawdzenia czy 'action' jest 'ajax' i żadne 'action' nie jest mi już potrzebne?
Pyton_000
dokładnie tak smile.gif Choć i to ma swoje wady ponieważ czasami serwer nie obsługuje tego nagłówka :|
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.