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

question-closed Nie działa logowanie do strony po przerobieniu na odczyt zakodowanych haseł

Object Storage Arubacloud
0 głosów
479 wizyt
pytanie zadane 30 sierpnia 2016 w PHP przez Q_Nick Mądrala (5,010 p.)
zamknięte 31 sierpnia 2016 przez Arkadiusz Waluk

Stworzyłem stronę na podstawie kursu pana Mirosława i logowanie działało do puki nie doszło do momentu zmiany w logowaniu. Teraz nie można zalogować się ani w sposób wklejając zakodowane hasło, ani normalnie.

Podaje skrypty stron:

Logowanie

<?php
	session_start();
	if ((!isset($_POST['login'])) || (!isset($_POST['password'])))
	{
		header('Location: index.php');
		exit();
	}
	require_once "dbinfo.php";
	$connect = @new mysqli($host, $db_user, $db_password, $db_name);
	if ($connect->connect_errno!=0)
	{
		echo "Error".$connect->connect_errno;
	}
	else
	{
		$login= $_POST ['login'];
		$password= $_POST ['password'];
		
		$login = htmlentities($login, ENT_QUOTES, "UTF-8");
		
	if ($rezultat = @$connect -> query (sprintf("SELECT * FROM users WHERE user='%s'",
	mysqli_real_escape_string($connect, $login))))
		{
			$ilu_userow = $rezultat->num_rows;
			if($ilu_userow >0)
			{
				$wiersz = $rezultat->fetch_assoc();
				if(password_verify($password, $wiersz['pass']))
				{
				$_SESSION['zalogowany']=true;
				$_SESSION['id']=$wiersz['id'];
				$_SESSION['user'] = $wiersz['user'];
				$_SESSION['money'] = $wiersz['money'];
				$_SESSION['rank'] = $wiersz['rank'];
				$_SESSION['email'] = $wiersz['email'];
				
				unset($_SESSION['blad']);
				$rezultat -> free_result();
				
				header ('Location: index.php');
				}
				else
				{
				echo $_SESSION['blad'] = '<div id="blad">Nieprawidłowy login lub hasło!</div>';
				header('Location: loginpage.php');
				}
			}
			else
			{
				echo $_SESSION['blad'] = '<div id="blad">Nieprawidłowy login lub hasło!</div>';
				header('Location: loginpage.php');
			}
		}
	$connect->close();
	}
	 
?>

Rejestrowanie

<?php

	session_start();
	
	if (isset($_POST['email']))
	{
		//Udana walidacja? Załóżmy, że tak!
		$wszystko_OK=true;
		
		//Sprawdź poprawność nickname'a
		$nick = $_POST['nick'];
		
		//Sprawdzenie długości nicka
		if ((strlen($nick)<3) || (strlen($nick)>25))
		{
			$wszystko_OK=false;
			$_SESSION['e_nick']="Nick musi posiadać od 3 do 25 znaków!";
		}
		
		if (ctype_alnum($nick)==false)
		{
			$wszystko_OK=false;
			$_SESSION['e_nick']="Nick może składać się tylko z liter i cyfr (bez polskich znaków)";
		}
		
		// Sprawdź poprawność adresu email
		$email = $_POST['email'];
		$emailB = filter_var($email, FILTER_SANITIZE_EMAIL);
		
		if ((filter_var($emailB, FILTER_VALIDATE_EMAIL)==false) || ($emailB!=$email))
		{
			$wszystko_OK=false;
			$_SESSION['e_email']="Podaj poprawny adres e-mail!";
		}
		
		//Sprawdź poprawność hasła
		$haslo1 = $_POST['haslo1'];
		$haslo2 = $_POST['haslo2'];
		
		if ((strlen($haslo1)<6) || (strlen($haslo1)>25))
		{
			$wszystko_OK=false;
			$_SESSION['e_haslo']="Hasło musi posiadać od 6 do 25 znaków!";
		}
		
		if ($haslo1!=$haslo2)
		{
			$wszystko_OK=false;
			$_SESSION['e_haslo']="Podane hasła nie są identyczne!";
		}	

		$haslo_hash = password_hash($haslo1, PASSWORD_DEFAULT);
		
		//Czy zaakceptowano regulamin?
		if (!isset($_POST['regulamin']))
		{
			$wszystko_OK=false;
			$_SESSION['e_regulamin']="Potwierdź akceptację regulaminu!";
		}				
		
		//Bot or not? Oto jest pytanie!
		$sekret = "6LdhyigTAAAAAAMMxoYt29A6CbYzoSVHiVxvQlDm";
		
		$sprawdz = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$sekret.'&response='.$_POST['g-recaptcha-response']);
		
		$odpowiedz = json_decode($sprawdz);
		
		if ($odpowiedz->success==false)
		{
			$wszystko_OK=false;
			$_SESSION['e_bot']="Potwierdź, że nie jesteś botem!";
		}		
		
		//Zapamiętaj wprowadzone dane
		$_SESSION['fr_nick'] = $nick;
		$_SESSION['fr_email'] = $email;
		$_SESSION['fr_haslo1'] = $haslo1;
		$_SESSION['fr_haslo2'] = $haslo2;
		if (isset($_POST['regulamin'])) $_SESSION['fr_regulamin'] = true;
		
		require_once "dbinfo.php";
		mysqli_report(MYSQLI_REPORT_STRICT);
		
		try 
		{
			$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
			if ($polaczenie->connect_errno!=0)
			{
				throw new Exception(mysqli_connect_errno());
			}
			else
			{
				//Czy email już istnieje?
				$rezultat = $polaczenie->query("SELECT id_user FROM users WHERE email='$email'");
				
				if (!$rezultat) throw new Exception($polaczenie->error);
				
				$ile_takich_maili = $rezultat->num_rows;
				if($ile_takich_maili>0)
				{
					$wszystko_OK=false;
					$_SESSION['e_email']="Istnieje już konto przypisane do tego adresu e-mail!";
				}		

				//Czy nick jest już zarezerwowany?
				$rezultat = $polaczenie->query("SELECT id_user FROM users WHERE user='$nick'");
				
				if (!$rezultat) throw new Exception($polaczenie->error);
				
				$ile_takich_nickow = $rezultat->num_rows;
				if($ile_takich_nickow>0)
				{
					$wszystko_OK=false;
					$_SESSION['e_nick']="Istnieje już gracz o takim nicku! Wybierz inny.";
				}
				
				if ($wszystko_OK==true)
				{
					//Hurra, wszystkie testy zaliczone, dodajemy gracza do bazy
					
					if ($polaczenie->query("INSERT INTO users VALUES ('', '$nick', '$haslo_hash', 0, 'brak' ,'0', '$email')"))
					{
						$_SESSION['udanarejestracja']=true;
						echo '<div id="zarejestrowano"><br><zarejestrowano<br><br>
						<a href="loginpage.php"><div id="login_button">Przedź do strony logowania</div></a></div>';
					}
					else
					{
						throw new Exception($polaczenie->error);
					}
					
				}
				
				
				$polaczenie->close();
			}
			
		}
		catch(Exception $e)
		{
			echo '<div id="devconsole"><span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o rejestrację w innym terminie!</span>';
			echo '<br />Informacja developerska: '.$e.'</div>';
		}
		
	}
	
	
?>
<html>
	<?php
		include('head.php');
	?>
<body>
	<div id="all">
		<?php
			include('logo.php');
			include('ad.php');
		?>
		<main>
		<div id="registerform">
			<form method="post">
			Nickname: <br /> <input type="text" value="
			<?php
				if (isset($_SESSION['fr_nick']))
				{
					echo $_SESSION['fr_nick'];
					unset($_SESSION['fr_nick']);
				}
			?>" name="nick" /><br />
			
			<?php
				if (isset($_SESSION['e_nick']))
				{
					echo '<div class="error">'.$_SESSION['e_nick'].'</div>';
					unset($_SESSION['e_nick']);
				}
			?>
			
			E-mail: <br /> <input type="text" value="
			<?php
				if (isset($_SESSION['fr_email']))
				{
					echo $_SESSION['fr_email'];
					unset($_SESSION['fr_email']);
				}
			?>" name="email" /><br />
			
			<?php
				if (isset($_SESSION['e_email']))
				{
					echo '<div class="error">'.$_SESSION['e_email'].'</div>';
					unset($_SESSION['e_email']);
				}
			?>
			
			Twoje hasło: <br /> <input type="password"  value="
			<?php
				if (isset($_SESSION['fr_haslo1']))
				{
					echo $_SESSION['fr_haslo1'];
					unset($_SESSION['fr_haslo1']);
				}
			?>" name="haslo1" /><br />
			
			<?php
				if (isset($_SESSION['e_haslo']))
				{
					echo '<div class="error">'.$_SESSION['e_haslo'].'</div>';
					unset($_SESSION['e_haslo']);
				}
			?>		
			
			Powtórz hasło: <br /> <input type="password" value="
			<?php
				if (isset($_SESSION['fr_haslo2']))
				{
					echo $_SESSION['fr_haslo2'];
					unset($_SESSION['fr_haslo2']);
				}
			?>" name="haslo2" /><br />
			
			<label>
				<input type="checkbox" name="regulamin"
			<?php
				if (isset($_SESSION['fr_regulamin']))
				{
					echo "checked";
					unset($_SESSION['fr_regulamin']);
				}
					?>/> Akceptuję regulamin
			</label>
			
			<?php
				if (isset($_SESSION['e_regulamin']))
				{
					echo '<div class="error">'.$_SESSION['e_regulamin'].'</div>';
					unset($_SESSION['e_regulamin']);
				}
			?>	
			
			<div class="g-recaptcha" data-sitekey="6LdhyigTAAAAALjx_WfZK1RrfA1JSv6pHA-vq_Rl"></div>
			
			<?php
				if (isset($_SESSION['e_bot']))
				{
					echo '<div class="error">'.$_SESSION['e_bot'].'</div>';
					unset($_SESSION['e_bot']);
				}
			?>	
			
			<br />
			
			<input type="submit" value="Zarejestruj się" />
			
		</form>
	</div>
	<?php
		include('regulamin.html');
	?>
		</main>
		<?php
			include('ad.php');
			include('footer.php');
		?>
	</div>
	</body>
</html>

No i pola w bazie danych:

Pełne teksty

  id_user user password money corporation rank

email

Porównywałem z pobranym kodem i wszystko jest prawie identyczne. Proszę o pomoc,  pewnie popełniłem jakiś głupi błąd i dlatego nie działa, ale się uczę i jak wiadomo uczymy się na błędach :D

komentarz zamknięcia: "Udało się rozwiązać problem."
komentarz 30 sierpnia 2016 przez niezalogowany
edycja 30 sierpnia 2016

Miałem ten sam problem -> pobierz paczkę z kodami i siedź sprawdzając linijki (w moim przypadku został mi dodatkowy ' przy %s ;) )

2. póki a nie puki jeżeli nie mówisz o kodzie puk, proszę

EDIT: Najlepiej zacznij debugować kod żeby dowiedzieć się w której części jest fail . Komentuj kolejne wykonywane części od największej i wstawiaj np

echo "Here is ok";

wtedy się dowiesz gdzie dokładnie jest problem, i możesz go usunąć ;)

 

komentarz 30 sierpnia 2016 przez Q_Nick Mądrala (5,010 p.)
edycja 30 sierpnia 2016 przez Q_Nick
A przepraszam. Pisałem na szybko i nie sprawdziłem swojej ortografii.

Robiłem tak, ale wszystko niby jest poprawnie.

4 odpowiedzi

+1 głos
odpowiedź 30 sierpnia 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)

 $2y$10$ltVg9kspfdcZDD2RX9

Tak wygląda Twoje zahaszowane hasło w bazie danych?

Jakiego typu masz kolumnę na hasło i jaką ma długość?

Przypominam, że

Therefore, it is recommended to store the result in a database column that can expand beyond 60 characters (255 characters would be a good choice).

http://php.net/manual/en/function.password-hash.php

komentarz 30 sierpnia 2016 przez Q_Nick Mądrala (5,010 p.)
Miałem na 25 ustawione więc poprawiłem, ale jednak nadal nie działa. Teraz nie ważne jakie hasło wpiszę to mnie przekierowuje na stronę startową (czyli tak jakbym się zalogował) ale nie loguje bo nadal nie ma informacji o zalogowaniu
0 głosów
odpowiedź 30 sierpnia 2016 przez rafal1997 Gaduła (3,180 p.)
edycja 30 sierpnia 2016 przez rafal1997
Sprawdź jak ci zakodowało hasło
komentarz 30 sierpnia 2016 przez Q_Nick Mądrala (5,010 p.)
stworzyłem konto Administrator z hasłem administrator i wyszło że hasło w bazie to $2y$10$ltVg9kspfdcZDD2RX9
0 głosów
odpowiedź 30 sierpnia 2016 przez Q_Nick Mądrala (5,010 p.)
Przejrzałem wszystko i z tego co zauważyłem nie odczytuje po zalogowaniu $_SESSION['zalogowany'].

Czym to może być spowodowane?
komentarz 30 sierpnia 2016 przez rafal1997 Gaduła (3,180 p.)

Żeby ci cokolwiek pokazywało musisz sprawdzić czy jesteś zalogowany i wtedy wyświetlić to co chcesz:

if($_SESSION['zalogowany'] = true)

{

//wyświetlane dane

}else { echo 'nie masz dostępu do tej podstrony czy coś tam ';}

 

komentarz 30 sierpnia 2016 przez Q_Nick Mądrala (5,010 p.)
Tak jak pisałem wyżej pisze mi że nieznana zmienna $_session['zalogowany'] i z tego co wydedukowałem w tym tkwi cały problem.
komentarz 30 sierpnia 2016 przez Abel Mądrala (5,140 p.)

A w pliku do którego cię przekierowuje po zalogowaniu masz rozpoczętą sesje? 

$session_start();

 

komentarz 31 sierpnia 2016 przez Q_Nick Mądrala (5,010 p.)
Tak
0 głosów
odpowiedź 31 sierpnia 2016 przez Q_Nick Mądrala (5,010 p.)

oto kod strony do której jest przekierowanie
 

<?php
   session_start();
?>
<html>
    <?php
        include('head.php');
    ?>
<body>
    <?php
        include('menu.php');
    ?>
    <div id="all">
        <?php
            include('logo.php');
            include('loginbox.php');
        ?>
        <main>
        
        </main>
        <?php
            include('footer.php');
        ?>
    </div>
    </body>
</html>


 


 

A to zaincludowany plik loginbox.php

 

<div id="login">
    
    <?php
    if(($_SESSION['zalogowany']) && ($_SESSION['zalogowany']==true))
    {
        echo '<div id="loginbox">Zalogowany jako: '.$_SESSION['user'].' <a href="logout.php"><div id="login_button">Wyloguj</div></a></div>';
    }
    else
    {
        echo '<div id="loginbox"><a href="loginpage.php"><div id="login_button">Zaloguj się</div></a></div>';
        echo '<div id="loginbox"><a href="registerpage.php"><div id="login_button">Zarejestruj się</div></a></div>';
    }
    ?>
        
    
</div>

 

komentarz 31 sierpnia 2016 przez Q_Nick Mądrala (5,010 p.)
Udało się rozwiązać problem. Musiałem po header('Location:index.php') dać exit() i zaczęło działać. Dziękuje wszystkim za udzieloną pomoc i poświęcony czas :)

Podobne pytania

0 głosów
1 odpowiedź 280 wizyt
pytanie zadane 12 września 2016 w PHP przez Kuba Kubas Początkujący (300 p.)
0 głosów
1 odpowiedź 442 wizyt
pytanie zadane 2 grudnia 2018 w PHP przez jakubmark Początkujący (370 p.)
0 głosów
1 odpowiedź 553 wizyt
pytanie zadane 30 listopada 2018 w PHP przez marcolo Obywatel (1,530 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 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!

...