Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Blokowanie linków bezpośrednich
Forum PHP.pl > Forum > Przedszkole
tomek200
Witam. Mam strone na której mam możliwość logowania i chce zablokować możliwość wchodzenia na strone otrzymaną po zalogowaniu poprzez bezpośrednie linki. Jeżeli strona z formulażem logowania to strona 'A' a strona otrzymana po zalogowaniu to 'B', ja chce zroibić coś takiego że jak ktoś w przeglądarce wpisze www.domena.pl/B.php to żeby pżekierowało go na strone z logowaniem czyli 'A'. PS. Sory za orto.
SpiritCode
Może spróbuj prosty warunek na istnienie sesji?

Jeśli masz użytkownika zalogowanego i jest mu przypisana sesja możesz łatwo sprawdzić czy ona istnieje.
Jeśli nie dodajesz tylko linijkę:
  1. header('Location: /A.php');
  2. die(); //zapobiega ew. wykonaniu dalszej części skryptu


To powinno rozwiązać probelm
Forti
na stronie B.php sprawdzasz czy user jest zalogowany. Jak nie to przekierowanie na A.php.
SpiritCode
A tak przy okazji. Trzymaj się jednego tematu. Ten jest trzecim o tym samym temacie.
tomek200
  1. header('Location: /A.php');
  2. die(); //zapobiega ew. wykonaniu dalszej części skryptu


SpiritCode to dziala ale jak się loguje to też przekierowuje mnie na strone 'A'.
Dało by się zrobić że jak się logujesz to cię nie przekierowuje?
Turson
Jak użytkownik się zaloguje ustawiasz sesję. Plik B.php ma sprawdzic czy masz sesje. Jak masz - ok, jak nie to przekieruj na A
tomek200
Nie wiem jak to zrobić jeśli ktoś będzie wiedział to moge dodać kod php logowania.
SpiritCode
Zasadniczo skoro mówisz, ze masz lgoowanie zrobione to wiesz pod jakim kluczem masz przechowywane dane o użytkowniku.

Dajmy na to kiedy ktoś się loguje ustawiasz mu klucz $_SESSION['uzytkownik'] w którym są potrzebne Ci dane o tym użytkowniku.

Wtedy wystarczy że dasz warunek:
  1. if(!isset($_SESSION['uzytkownik']) || empty($_SESSION['uzytkownik']))
  2. {
  3. header('Location: /A.php');
  4. die();
  5. }


Wyjasnienie:
Jesli nie jest ustawiony klucz 'uzytkownik' w tablicy $_SESSION lub ta komórka jest pusta
Przekieruj na /A.php
Terrorizer
Ja mam u siebie tak jak poniżej i nawet fajnie to działa mimo, że sam kod może być troche lamerski biggrin.gif
Najpierw przypisujesz przy logowaniu session id, a potem:
  1. if(empty($_SESSION['id'])){
  2. header('location: logout.php');
  3. }

plik logout.php :
  1. <?php
  2. $_session['id'] = array();
  3. header('location: ../index.php');
  4. ?>
SpiritCode
I to jest dokładnie to co ja podałem jako rozwiązanie wink.gif
Żeby było ciekawiej w innym temacie autora tematu o tej samej tematyce jest już podobna odpowiedź podana
tomek200
Mam proźbe, daje kod logowania jeśli ktos wie to niech go zedytuje weług powyrzszych wskazań.
  1. <?PHP
  2. function checkPass($user, $pass)
  3. {
  4.  
  5. if(!$fd = @fopen("passwords.txt", "r")) return false;
  6. while (!feof ($fd)){
  7. $line = trim(fgets($fd));
  8. if(($pos = strpos($line, ":"))===false) continue;
  9.  
  10. $tempUser = substr($line, 0, $pos);
  11. if($tempUser != $user) continue;
  12.  
  13. $tempPass = substr($line, $pos + 1, strlen($line) - $pos);
  14.  
  15. if($tempPass != $pass) continue;
  16. else{
  17. fclose($fd);
  18. return true;
  19. }
  20. }
  21. fclose($fd);
  22. return false;
  23. }
  24. if(!isSet($_POST["haslo"]) || !isSet($_POST["user"])){
  25. include('error.html');
  26. exit();
  27. }
  28. if(checkPass($_POST["user"], $_POST["haslo"])){
  29. include("index1.php");
  30. }
  31. else{
  32. include('error.html');
  33. }
  34. ?>

Z góry dziękuje. PS. to nie jest mój autorski kod.
Forti
ale to jest brzydkie... z neta pobrałeś i to stary skrypt ;]

  1. <?PHP
  2. function checkPass($user, $pass)
  3. {
  4.  
  5. if(!$fd = @fopen("passwords.txt", "r")) return false;
  6. while (!feof ($fd)){
  7. $line = trim(fgets($fd));
  8. if(($pos = strpos($line, ":"))===false) continue;
  9.  
  10. $tempUser = substr($line, 0, $pos);
  11. if($tempUser != $user) continue;
  12.  
  13. $tempPass = substr($line, $pos + 1, strlen($line) - $pos);
  14.  
  15. if($tempPass != $pass) continue;
  16. else{
  17. fclose($fd);
  18. return true;
  19. }
  20. }
  21. fclose($fd);
  22. return false;
  23. }
  24. if(!isSet($_POST["haslo"]) || !isSet($_POST["user"])){
  25. include('error.html');
  26. exit();
  27. }
  28. if(checkPass($_POST["user"], $_POST["haslo"])){
  29. $_SESSION["logged"] = true;
  30. include("index1.php");
  31. }
  32. else{
  33. include('error.html');
  34. }
  35. ?>


i teraz wszędzie sprawdzaj:

  1. if ($_SESSION["logged"] = true) {
  2. //zalogowany
  3. } else {
  4. // nie zalogowany
  5. }
SpiritCode
Hehe. Czy ja dobrze widzę logowanie z pliku?

A co do warunków - w Twoim przypadku szybszą metodą będzie:

  1. if(!isset($_SESSION['logged']))
  2. {
  3. // przekierowanie ktore wczesniej podalem.
  4. }


I daj to najlepiej na poczatku kazdej podstrony z ktorej chcesz przrkierowac niezalogowanych
tomek200
Dzięki wszystkim, już działa. Tamat Zamykam.
com
Forti

  1. if ($_SESSION["logged"] === true)
jak juz wink.gif
Forti
Cytat(com @ 29.12.2014, 17:01:49 ) *
Forti

  1. if ($_SESSION["logged"] === true)
jak juz wink.gif


nie koniecznie
Turson
Koniecznie
SpiritCode
Turson nie chciałem tego pisać bo mógł popełnić literówkę ale skoro się uprał jeszcze przy tym to tak.
EW. może jeszcze być:
  1. if ($_SESSION["logged"] == true)


dlatego uznałem brak jednego znaku przypisania za literówkę biggrin.gif
Terrorizer
Mógłbym zapytać z czego to wynika?
Domyślam się, że przy == przypisanie np wartości dodatniej również dałoby true np liczba 1 ?
Możliwe ,że nie wiem o czym piszę, ale staram się wczuć w temat biggrin.gif
com
zgadza się, owszem ale skoro jest tam wartość boolowska to trzeba również sprawdzić czy sa tego samego typu :
http://ideone.com/ATpeU2

a zwróciłem na to uwagę, bo jak ktoś odkopie temat to zaraz pojawia się posty czemu to nie działa wink.gif
Turson
Kwestia odroznienia
  1. if ($_SESSION["logged"] = true)

od
  1. if ($_SESSION["logged"] == true)

i od
  1. if ($_SESSION["logged"] === true)
Rysh
Cytat
$a == $b Equal TRUE if $a is equal to $b after type juggling.
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type.

Poza tym, $_SESSION['logged'] a nie $_SESSION["logged"].
com
Cytat(Rysh @ 29.12.2014, 21:28:53 ) *
Poza tym, $_SESSION['logged'] a nie $_SESSION["logged"].


to już akurat kosmetyka, na działanie to wpływu nie ma, co do reszty masz racje, ale najlepiej to zobrazować na przykładzie:
http://ideone.com/ATpeU2
Rysh
Masz rację, ale warto uczyć od samego początku dobrych nawyków.
SpiritCode
Rysh nawyk na kosmetykę? Każdy ma swoje nawyki co do kosmetyki. Jeden klucz podaje w apostrofach a drugi w cudzysłowach. Tak jak com napisał to nie wpływa na działenie skryptu. Podobnie jak np klamra w nowej linii czy w tej samej. Temat rzeka. Ale to już offtopic.gif biggrin.gif
com
offtopic.gif
sorry ale nie mogłem się powstrzymać, Rysh miał słuszność pisząc o tym fakcie, bo ta kosmetyka ma znaczenie dlatego że w ten sposób można uzyskać coś takiego
http://ideone.com/x6gUcj
nie miało znaczenia ale w tym wypadku jak przekazywaliśmy po prostu zwykłego stringa, gdzie oczywiście zapis w '' wykonał sie nano sekundy szybciej ;D

wiem że wyjdę na zżede SpiritCode ale sam rozumiesz lata praktyki na tym forum uczuliły mnie na takie głupie błędy wink.gif
SpiritCode
offtopic.gif
A nie no to to oczywiste smile.gif Nie wziąłem tego przypadku pod uwagę smile.gif
Forti
Cytat(SpiritCode @ 29.12.2014, 21:18:56 ) *
Turson nie chciałem tego pisać bo mógł popełnić literówkę ale skoro się uprał jeszcze przy tym to tak.
EW. może jeszcze być:
  1. if ($_SESSION["logged"] == true)


dlatego uznałem brak jednego znaku przypisania za literówkę biggrin.gif



Sorka ! biggrin.gif Faktycznie dałem = zamiast == ;] jak amator.
thek
Zamykam ten, bo się zaczyna w Twoich dwóch tematach to samo. Ten można uznać za zamknięty i kolejny każdy post, choć dotyczy już innego tematu, tu wrzucany, jest niczym innym niż duplikowaniem.
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.