Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Trzymanie przechwyconej sesji
darney
post
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
Go to the top of the page
+Quote Post
nospor
post
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)
Go to the top of the page
+Quote Post
darney
post
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

  1. $_SESSION['refero']=$_SERVER['HTTP_REFERER'];



a w formularzu

  1. <input type='hidden' value='<?php echo $_SESSION['refero'] ?>' name='adres_refer'/>


Ten post edytował darney 25.01.2012, 14:56:42
Go to the top of the page
+Quote Post
nospor
post
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.
Go to the top of the page
+Quote Post
darney
post
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)

  1.  
  2. // czy wczesniej deklarowac sesje i czy poprawnie wykonuje zapamiętanie zmiennej w sesji?
  3. $_SESSION['referos']=$_SERVER['HTTP_REFERER'];
  4. $referos=$_SESSION['referos'];
  5.  
  6. if ($referos="xxxxl/login") //czy poprawnie przypisuje?
  7. {
  8. //? co tu mam wpisać ?
  9. }
  10. else
  11. {
  12. // ? tutaj tez nie wiem ?
  13. }


Ten post edytował darney 26.01.2012, 08:29:53
Go to the top of the page
+Quote Post
vee
post
Post #6





Grupa: Zarejestrowani
Postów: 64
Pomógł: 5
Dołączył: 16.08.2011

Ostrzeżenie: (0%)
-----


zrób sobie tak:
  1. var_dump($_SERVER['HTTP_REFERER']);


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.
Go to the top of the page
+Quote Post
by_ikar
post
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)
Go to the top of the page
+Quote Post
darney
post
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)
Go to the top of the page
+Quote Post
thek
post
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.
Go to the top of the page
+Quote Post
darney
post
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.
Go to the top of the page
+Quote Post
by_ikar
post
Post #11





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3.  
  4. if(!isset($_SESSION['zalogowany']))
  5. {
  6. $_SESSION['zalogowany'] = 0;
  7. }
  8.  
  9. if(1 == $_SESSION['zalogowany'])
  10. {
  11. header('Location: /');
  12. }
  13.  
  14. if(!isset($_SESSION['ref']))
  15. {
  16. if(empty($_SERVER['HTTP_REFERER']))
  17. {
  18. $_SESSION['ref'] = '/'; //przekierowanie na główną jeżeli referer jest pusty
  19. } else
  20. {
  21. $_SESSION['ref'] = $_SERVER['HTTP_REFERER'];
  22. }
  23. }
  24.  
  25. if('POST' == $_SERVER['REQUEST_METHOD'])
  26. {
  27. //poprawne logowanie
  28. $_SESSION['zalogowany'] = 1;
  29. //..
  30.  
  31.  
  32. //przekierowanie
  33. $ref = $_SESSION['ref'];
  34. unset($_SESSION['ref']);
  35.  
  36. header('Location: '.$ref);
  37. }


Przykład, dla zobrazowania jak mógłbyś to zrobić.

Ten post edytował by_ikar 26.01.2012, 09:12:41
Go to the top of the page
+Quote Post
thek
post
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ą.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 19:23