[php] problem z ciasteczkami

0

Chciałem napisać prosty panel admina z logowaniem, z wykorzystaniem ciasteczek. Wszystko działa ładnie, ciasteczka, a właściwie jedno ciasteczko z hasłem działa tak długo jak trzeba, ale nie mogę go usunąć. Zrobiłem stronę 'logout.php', która ma za zadanie usunąć ciastko, przez co żeby się zalogować należy znowu wpisać hasło. PHP zacząłem poznawać dwa dni temu, więc nie linczujcie :>

pliki wyglądają następująco:
(sorki za te nie php-owe wcięcia w kodzie, ale jestem przyzwyczajony do stylu z C)

index.php

<?php
	//jeśli ciasteczka się zgadzają to od razu zaloguj
	include "pass.php";
	if( isset($_COOKIE['hello_world']) && $_COOKIE['hello_world'] == $password)
	{
		include "welcome.php";
	}
	else //jeśli nie - wyświetl panel logowania
	{
		echo "<form action=\"login.php\" method=\"post\">
			  <input type=\"password\" name=\"pass\" size=\"15\">
			  <input type=\"submit\" value=\"Zaloguj\">
			  </form>";
	}
?>

login.php

<?php
	 $pass  = $_POST['pass'];
	 include "pass.php";
	 if(isset($pass))
	 {
		 if($pass == $password)
		 {
			setcookie("hello_world", $pass, time() + 60);
			include "welcome.php";
		 }
		 else
		 {
			echo 'Hasło niepoprawne<br /><a href="index.php">Spróbuj ponownie</a>'; 
		 }
	 }
	 else
	 {
		echo 'Hasło niepoprawne<br /><a href="index.php">Spróbuj ponownie</a>'; 
	 }
?>

pass.php

<?php
	$password = "haslo"
?>

welcome.php

<?php
	echo "Jesteś zalogowany<br /><br />";
	echo "<a href=\"logout.php\">Wyloguj</a>";
?>

logout.php

<?php 
	setcookie("hello_world", "", time() -3600);
	
	// komunikat
	echo "Zostałeś wylogowany.<br /><br />";
	echo "<a href=\"index.php\">Zaloguj ponownie</a>";
?>

Przy próbie wylogowania (usunięcia ciastka) wyskakuje strona z ostrzeżeniem, a ciastko pozostaje bez zmian:

Warning: Cannot modify header information - headers already sent by (output started at C:\Programy\VertrigoServ\www\site\admin\logout.php:1) in C:\Programy\VertrigoServ\www\site\admin\logout.php on line 2
You have been logged out.

Log in again
0

Obstawiam BOM w pliku logout.php.

0

@nav, człowieku, kocham Cię :D
Siedziałem nad tym cały dzień

Dziękuję bardzo.

0

I przy okazji, dobra rada na przyszłość. Mamy w PHP takie coś jak apostrof i nie trzeba się męczyć:

echo "<form action=\"login.php\" method=\"post\">
                          <input type=\"password\" name=\"pass\" size=\"15\">
                          <input type=\"submit\" value=\"Zaloguj\">
                          </form>";

Kiedy można to zrobić tak:

echo('<form action="login.php" method="post">
                          <input type="password" name="pass" size="15">
                          <input type="submit" value="Zaloguj">
                          </form>');

Od razu wzrasta czytelność...

Oprócz tego zapisywanie hasła w normalnej postaci do ciasteczka nie jest zalecane. Najlepiej wygenerować jakiś losowy numerek, zapisać go do bazy danych wraz z:
IP użytkownika, datą wygaśnięcia autologinu i co tam jeszcze chcesz, a potem tenże numerek zapisać do ciasteczka. Wtedy z innego IP system odmówi autologinu tym ciachem.

0

Ok, dziękuję za wszystkie rady, postaram się je wykorzystać.
Tak właśnie myślałem, że do najbezpieczniejszych owy skrypt nie należy, więc wziąłem to sobie jako ćwiczenie na początek nauki. Cóż, z bazami danych jeszcze nie pracowałem, ale myślę że jakoś sobie poradzę.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1