![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 21.08.2010 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Wiem że ten temat był poruszany ale nie znalazłem kompletnego wyjaśnienia jaką metode zastosować. Tłumacze już o co chodzi. Chodzi o powrót do strony na której byliśmy kiedy zostaliśmy poproszeni o zalogowanie User chce wejść ze strony nauka.php w odpowiedni dzial np nauka.php?lekcja=1; Skrypt przenosi do login.php prosi o zalogowanie się więc w formularzu tworze ukryte pole hidden gdzie trzymam tam $_SERVER['HTTP_REFERER']; Wszystko działa wyśmienicie po zalogowaniu ustawiłem sobię header który przenosi mnie do poprzedniej strony nauka.php?lekcja=1; Problem który mam i chce rozwiązać i czytałem też że to nie takie proste. Mianowicie Kiedy popełnimy bład w formularzu strona się przeładuje i w hidden polu znajdzie sie wartość adresu czyli strony logowania login.php Pytanie jest takie. W jaki sposób zmusić za pomocą sesji do zapamiętania na stałe jednorazowego adresu by nie tracić go przy nieudanym logowaniu. Ten post edytował darney 25.01.2012, 14:52:50 |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Przy wejsciu na logowanie zapamietuj adres w sesji. Jesli pamietany adres jest adresem logowania to go nie zapamietuj. proste (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 21.08.2010 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Nie siedze za bardzo jeszcze w sesjach i dopiero się ich uczę.
Czyli chodzi o to jezeli adres jest login.php to nic nie rob a jezeli jest inny to
a w formularzu
Ten post edytował darney 25.01.2012, 14:56:42 |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
hidden w formularzu jest już nie potrzebny. Przecież adres zapamiętałeś w sesji.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 21.08.2010 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Nie bardzo mi to wychodzi więc potrzebuje porady co do sesji czy poprawnie przypisuje i zadaje zapytanie.
Próbuje wykonać to tak i nie wiem czy dobrze myśle ale pewnie źle (IMG:style_emoticons/default/tongue.gif)
Ten post edytował darney 26.01.2012, 08:29:53 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 5 Dołączył: 16.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
zrób sobie tak:
zobacz co CI wyświetla dla strony logowania, a co Ci wyświetla dla innych stron. Będziesz wiedział co wrzucić w warunek IF'a. Po zalogowaniu sprawdzasz skąd był referer, jeśli z logowania to przekieruj np na stronę główną, jeśli z innej strony - to tam przekieruj. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Podczas wejścia na stronę logowania, stwórz sobie warunek który będzie sprawdzał czy dany klucz w tablicy sesji istnieje. Jeżeli nie, to tworzysz taki klucz i przypisujesz do niego referer. Jeżeli refererem będzie strona logowania. To wcześniej musisz umieścić sobie warunek, że do strony mają dostęp wszyscy, prócz zalogowanych i jeżeli ktoś wejdzie zalogowany, to przekierujesz go na stronę główną.
U siebie zrobiłem to tak, że w momencie kiedy jakaś podstrona wymaga uwierzytelnienia, tuż przed samym przekierowaniem na stronę logowania, w sesji jest zapisywany aktualny adres, następnie użytkownik jest przekierowany na stronę logowania. Podczas prawidłowego logowania, na samym końcu kiedy już wszystkie niezbędne operacje się wykonają (aktualizacja ostatniej wizyty użytkownika, aktualnego adresu IP, aktualizacja w tabeli z ludźmi którzy są aktualnie online itp) to jest wcześniej w sesji zapamiętany adres jest przypisywany do zmiennej, a sam adres z sesji jest usuwany. Następnie adres przypisany do zmiennej, jest przekazywany do funkcji która przekierowuje użytkownika na podany adres. Rozwiązań problemu jest znacznie więcej, bo taki adres możesz również przekazać do adresu i następnie podczas poprawnego logowania pobrać z adresu ten adres i na podany adres przekierować. Osobiście wybrałem sesję, bo wiem że z sesji mi ten adres przypadkiem nie zniknie (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 21.08.2010 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
no to teraz tak.
jesli przejde z innego adresu do logowania to mam string(143) adres jeśli logowanie sie nie powiedzie string(53) adres logowania Powiedziałeś że jeśli z logowania to przekieruj na strone główną. Otóż ja chciał bym żeby jednorazowo zapamiętał że przeszedłem z adresu i w razie niepowodzenia w logowaniu dalej pamiętał ten adres (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Logika:
Kiedy masz zapamiętać swoją poprzednią stronę? Gdy wchodzisz na login.php. Tak więc przy wchodzeniu na login.php zapamiętaj referera w sesji LUB dopisz go do GET jako parametr (zależy czy chesz to ukryć czy nie). Kiedy masz przekierować na ostatnią stronę? Gdy poprawnie się zalogujesz lub naciśniesz link/guzik w stylu "Wróć do ostatnio oglądanej strony". Kiedy to robisz? Kiedy strona na którą przechodzisz wyłapie, że przechodziłeś z login.php, czyli referer to własnie login.php (IMG:style_emoticons/default/smile.gif) Tak naprawdę jedynie tyle wystarczy. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 21.08.2010 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
tylko dalej nie rozumiem bo zapisze refa w sesji lecz po ponownym odświeżeniu strony login.php w sesji ma wartość juz adres login.php.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Przykład, dla zobrazowania jak mógłbyś to zrobić. Ten post edytował by_ikar 26.01.2012, 09:12:41 |
|
|
![]()
Post
#12
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Ale kto wspomniał, że musisz za każdym przejściem zapamiętywać? Ty zapamiętujesz referera gdy nastąpiło przejście ze strony innej niż login.php. W każdym innym wypadku nie jest to konieczne. A kiedy zrobić przekierowanie na referera? Gdy na login.php było wywołanie poprawne POST, bez błedów (prawidłowe logowanie). Możesz przy okazji zdecydować gdzie przekierować jeśli referer był określoną stroną. Przykładowo jeśli refererem była strona główna, to możesz tak zostawić, albo przenieść do panelu usera. Na pewno można tak zrobić jeśli masz dedykowaną stronę logowania w serwisie. Powrót do niej po zalogowaniu nie ma większego sensu. Lepiej od razu rzucić do profilu lub na główną.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 19:23 |