Logowanie do panelu admina

0

Witam,

takich tematów jak i artykułów w sieci jest całe mnóstwo, jednak ja napisałem sobie swój, posiłkując się informacjami na temat bezpieczeństwa z wikipedii (http://pl.wikibooks.org/wiki/PHP/Sesje). Zatem chciałbym Was prosić o sprawdzenie czy ten skrypt do logowania dla admina jest, nie tyle czy poprawnie napisany (w sensie czy działający - bo działa), ale czy sensownie napisany, bo np. linijka gdzie jest:

	if( isset( $_GET['out'] ) ) {
		session_destroy();
		session_start();
	}

trochę chyba głupio wygląda, ale możliwe, że to dobre rozwiązanie, dlatego chcę Was, bardziej doświadczonych, zapytać. Cały kod:

<?php
	session_start();
	
	if( isset( $_GET['out'] ) ) {
		session_destroy();
		session_start();
	}
	
	if( !isset( $_SESSION['user'] ) ) {
		session_regenerate_id();
		$_SESSION['user'] = 0;
		$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
	} else {
		if( isset( $_POST['done'] ) ) {
			$login = $_POST['login'];
			$password = md5( $_POST['password'] );
			if( $login == "admin" && $password == "d41c6925bd8ff4b4c41d5b0ffd9a8253" )
				$_SESSION['user'] = 1;
		}
	}
	
	if( $_SESSION['ip'] != $_SERVER['REMOTE_ADDR'] ) {
		die( 'Proba przejecia sesji!' );      
    }

	echo '<html><head><title>Welcome</title>
				<link rel="stylesheet" type="text/css" href="astyles.css"></head>
				<body id="panel">';
	
	if( $_SESSION['user'] == 1 ) {
		echo 'Logged as admin';
		echo '<br><a href="admin.php?out=">log out</a>';
		// tutaj jakis include...
	} else {
		echo '<br><form action="admin.php" method="post">
			  <span class="txt">Login:</span><br><input class="input" type="text" name="login">
			  <br><span class="txt">Password:</span><br><input class="input" type="password" name="password">
			  <input type="hidden" name="done">
			  <br><br><input class="input" type="submit" value="Log in">';
	}
	
	echo '</form></body></html>';
?>

Pozdrawiam i dziękuję za Wasz poświęcony czas.

0

gdy czyścisz sesje możesz dodać jeszcze takie wpisy:

$_SESSION = array();
$_SESSION = "";

widziałem to jak ktoś stosuje i twierdził, że warto to dodać prócz samego session_destroy

0

Racja. Nawet kiedyś mój kolega jak pisał sesję, to dodał powalający na kolana komentarz ^^

public function logout()
{
     session_destroy();
     $_SESSION = null; // na wszelki wypadek bo cuda się dzieją
}

Możesz jeszcze za pomocą setcookie(); ustawić minusowy czas, życia ciasteczka sesyjnego, żeby je usunąć. I warto zaraz po zniszczeniu sesji, w tej samej metodzie/funkcji czyścić w bazie danych wpisy, żeby syf się nie robił.

0

Bardzo możliwe że cuda się dzieją jak się nie umie przeczytać dokumentacji. Cytuję:

session_destroy() niszczy wszystkie dane skojarzone z bieżącą sesją. Nie usuwa żadnych globalnych zmiennych związanych z sesją. Nie usuwa też ciasteczka sesyjnego.

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