• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ciastka i pętla przekierowań

Object Storage Arubacloud
0 głosów
3,595 wizyt
pytanie zadane 11 grudnia 2017 w PHP przez FireSlayder Nowicjusz (160 p.)

Witam, potrzebuję małej pomocy dotyczącej PHP. Z kursu wideo php z kanału Pasja informatyki zrobiłem system logowania. Niewiele w nim zmieniałem, więc kod jest podobny co w kursie, ale chciałem dodać funkcję zapamiętywania hasła. Stworzyłem więc pole typu checkbox, w pliku zaloguj.php po dokonaniu weryfikacji, czy użytkownik w bazie istnieje, oraz czy poprawne hasło zostało wpisane dodałem ifa z isset, który sprawdza, czy checkbox jest zaznaczony, jeśli tak to tworzy ciastko. W pliku index.php na początku, gdzie sesja startuje i jest sprawdzenie, czy sesja o takiej nazwie istnieje to leci przekierowanie do gra.php, dodałem drugiego isseta, który sprawdza, czy ciastko, wcześniej ustawione istnieje. A w pliku gra.php sprawdzenie na początku, czy sesja, albo ciastko nie jest ustawione to przekierowuje do indexa.php. I tu pojawia się problem. Po zalogowaniu za pomocą sesji, wszystko działa, ale przy użyciu opcji zapamiętania to występuje błąd w postaci pętli przekierowań. Jak to naprawić? Dodam, że zarówno sesja, jak i ciastko osobno działają. Ale razem już niekoniecznie, mimo, że w warunku, który sprawdzam daję ||, więc powinien być chyba sprawdzany jeden, lub drugi warunek z tego co kojarzę. Co robię źle? :c

To fragment z index.php

<?php
	session_start();
	
	if (isset($_SESSION['zalogowany']) || isset($_COOKIE['zalogowany'])) 
	{
		header('Location: gra.php');
		exit();
	}
?>

tu gra.php

<?php
	session_start();
	
	if(!isset($_SESSION['zalogowany'])||!isset($_COOKIE['zalogowany']))
	{
		header('Location: index.php');
		exit();
	}
?>

a tu zaloguj.php

if(password_verify($haslo,$wiersz['haslo']))
			{
			$_SESSION['zalogowany'] = true;
			$_SESSION['id'] = $wiersz['id'];
			$uzyt = $wiersz['nazwa'];
			
			$_SESSION['nazwa'] = $wiersz['nazwa'];
			if(isset($_POST['pamietaj']))
			{
				setcookie('zalogowany',$nazwa,time()+3600*24);
			}
			unset($_SESSION['blad']);
			$rezultat->free_result();
			header('Location: gra.php');

Dodam, że przy tych issetach próbowałem różnych kombinacji, także, żeby oba warunki musiały być spełnione

if(isset($_SESSION=['zalogowany'], $_COOKIE=['zalogowany']))

czy też zamiast || próbowałem dać &&, ale wszystko daje ten sam efekt. Z tego co rozumiem to po wpisaniu danych użytkownik jest przekierowany z index.php na gra.php, a stamtąd znów na index.php i tak w kółko, ale dlaczego, jeśli w indexie sprawdzane jest, czy jest ustawiona sesja lub ciastko, zaś w grze czy nie jest ustawione jedno, albo drugie?

2 odpowiedzi

+1 głos
odpowiedź 11 grudnia 2017 przez Ignobiles Obywatel (1,800 p.)

Hej

Nie wiem czy dobrze zrozumiałem, ale spróbuj w pliku gra.php użyć warunku 

If(!Isset($_SESSION["zalogowany"] ) && !Isset($_COOKIE["zalogowany"] ) ) 

Pozdrawiam wink

 

komentarz 12 grudnia 2017 przez FireSlayder Nowicjusz (160 p.)
Próbowałem też i tego, a nadal problem ten sam :/
komentarz 12 grudnia 2017 przez Ignobiles Obywatel (1,800 p.)
Hmm, w index.php na pewno ma być operator || a w gra.php na pewno musi być operator & &. Spróbuj wyświetlić w echo obie wartości może dowiesz się czegoś. Nie rozumiem też po co występuje tu komenda exit() ;
0 głosów
odpowiedź 12 grudnia 2017 przez FireSlayder Nowicjusz (160 p.)

Okej, nie wiem co dokładnie zrobiłem, ale już działa. Chyba wystarczyło usunąć komendy exit() zarówno z index.php, jak i gra.php, choć nie jestem pewien, bo trochę zamotałem przy próbie znalezienia błędu i zmieniałem kilka rzeczy, nie sprawdzając po kolei, czy działa, ale finalnie działa, więc jest git cheeky. Ale zadam przy okazji jeszcze jedno pytanie. Z tego co czytałem to nie jest zbyt bezpieczne zapisywać login, lub samo hasło. Co więc zapisać do ciastka? Użyłem loginu, żeby sprawdzić, czy będzie działać, a pasowałoby zabezpieczyć to trochę. No i jeszcze małe pytanko, podrzuci ktoś jakieś tutoriale na temat tego jak łączyć poszczególne strony? Chodzi o to, że w tych przykładach jest osobno strona do logowania index.php, która po zalogowaniu przenosi na gra.php, oraz później z drugiego tutoriala dochodzi także rejestracja na osobnej stronie. Jak więc połączyć to wszystko w jedno i bezpośrednio na stronie index.php móc się logować, rejestrować, a także aby treść na niej była wyświetlana w zależności od tego, czy ktoś jest zalogowany? Wystarczy do tego zrobić np nowego diva i w tym divie za pomocą include dodać plik z panelem logowania przykładowo?

komentarz 12 grudnia 2017 przez Ignobiles Obywatel (1,800 p.)

1.Moim zdaniem o wiele bezpieczniej jest zapisywać id użytkownika i na jego podstawie pobierac odpowiednie rekordy z bazy danych

2 Najłatwiej chyba pobierać wartość z adresu i na jej podstawie robić operacje np. Tworzysz adres gra.php?typ=0 I teraz

If(isset($_GET["typ"]) & & $_GET["typ"] ==0)
{
	//Jakies tam operacje np. Dla logowania
} 

W podobny sposób możesz się posłużyć ciasteczkiem lub sesja.

Pozdrawiamwink

Podobne pytania

0 głosów
1 odpowiedź 107 wizyt
pytanie zadane 6 maja 2018 w JavaScript przez revizor451 Obywatel (1,930 p.)
0 głosów
2 odpowiedzi 996 wizyt
0 głosów
0 odpowiedzi 249 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...