Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Blokowanie linków bezpośrednich
tomek200
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 4
Dołączył: 28.12.2014

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


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.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 28)
SpiritCode
post
Post #2





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


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

Ten post edytował SpiritCode 29.12.2014, 11:59:34
Go to the top of the page
+Quote Post
Forti
post
Post #3





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


na stronie B.php sprawdzasz czy user jest zalogowany. Jak nie to przekierowanie na A.php.
Go to the top of the page
+Quote Post
SpiritCode
post
Post #4





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


A tak przy okazji. Trzymaj się jednego tematu. Ten jest trzecim o tym samym temacie.
Go to the top of the page
+Quote Post
tomek200
post
Post #5





Grupa: Zarejestrowani
Postów: 102
Pomógł: 4
Dołączył: 28.12.2014

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


  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?

Ten post edytował tomek200 29.12.2014, 14:17:09
Go to the top of the page
+Quote Post
Turson
post
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Jak użytkownik się zaloguje ustawiasz sesję. Plik B.php ma sprawdzic czy masz sesje. Jak masz - ok, jak nie to przekieruj na A
Go to the top of the page
+Quote Post
tomek200
post
Post #7





Grupa: Zarejestrowani
Postów: 102
Pomógł: 4
Dołączył: 28.12.2014

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


Nie wiem jak to zrobić jeśli ktoś będzie wiedział to moge dodać kod php logowania.
Go to the top of the page
+Quote Post
SpiritCode
post
Post #8





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


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
Go to the top of the page
+Quote Post
Terrorizer
post
Post #9





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

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


Ja mam u siebie tak jak poniżej i nawet fajnie to działa mimo, że sam kod może być troche lamerski (IMG:style_emoticons/default/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. ?>


Ten post edytował Terrorizer 29.12.2014, 15:05:25
Go to the top of the page
+Quote Post
SpiritCode
post
Post #10





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


I to jest dokładnie to co ja podałem jako rozwiązanie (IMG:style_emoticons/default/wink.gif)
Żeby było ciekawiej w innym temacie autora tematu o tej samej tematyce jest już podobna odpowiedź podana
Go to the top of the page
+Quote Post
tomek200
post
Post #11





Grupa: Zarejestrowani
Postów: 102
Pomógł: 4
Dołączył: 28.12.2014

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


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.
Go to the top of the page
+Quote Post
Forti
post
Post #12





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


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. }
Go to the top of the page
+Quote Post
SpiritCode
post
Post #13





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


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
Go to the top of the page
+Quote Post
tomek200
post
Post #14





Grupa: Zarejestrowani
Postów: 102
Pomógł: 4
Dołączył: 28.12.2014

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


Dzięki wszystkim, już działa. Tamat Zamykam.
Go to the top of the page
+Quote Post
com
post
Post #15





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Forti

  1. if ($_SESSION["logged"] === true)
jak juz (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Forti
post
Post #16





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Cytat(com @ 29.12.2014, 17:01:49 ) *
Forti

  1. if ($_SESSION["logged"] === true)
jak juz (IMG:style_emoticons/default/wink.gif)


nie koniecznie
Go to the top of the page
+Quote Post
Turson
post
Post #17





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Koniecznie
Go to the top of the page
+Quote Post
SpiritCode
post
Post #18





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


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ę (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Terrorizer
post
Post #19





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

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


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 (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
com
post
Post #20





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


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 (IMG:style_emoticons/default/wink.gif)

Ten post edytował com 29.12.2014, 21:29:54
Go to the top of the page
+Quote Post
Turson
post
Post #21





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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

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

i od
  1. if ($_SESSION["logged"] === true)
Go to the top of the page
+Quote Post
Rysh
post
Post #22





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


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"].
Go to the top of the page
+Quote Post
com
post
Post #23





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


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
Go to the top of the page
+Quote Post
Rysh
post
Post #24





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Masz rację, ale warto uczyć od samego początku dobrych nawyków.
Go to the top of the page
+Quote Post
SpiritCode
post
Post #25





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


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ż (IMG:style_emoticons/default/offtopic.gif) (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
com
post
Post #26





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


(IMG:style_emoticons/default/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 (IMG:style_emoticons/default/wink.gif)

Ten post edytował com 29.12.2014, 21:56:02
Go to the top of the page
+Quote Post
SpiritCode
post
Post #27





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


(IMG:style_emoticons/default/offtopic.gif)
A nie no to to oczywiste (IMG:style_emoticons/default/smile.gif) Nie wziąłem tego przypadku pod uwagę (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Forti
post
Post #28





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


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ę (IMG:style_emoticons/default/biggrin.gif)



Sorka ! (IMG:style_emoticons/default/biggrin.gif) Faktycznie dałem = zamiast == ;] jak amator.
Go to the top of the page
+Quote Post
thek
post
Post #29





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Closed TopicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 03:51