jpeetje -> admin

Status
Niet open voor verdere reacties.

Barry_127

Gebruiker
Lid geworden
20 jan 2003
Berichten
478
Jpeetje --> je hebt zo'n admin bij je shoutbox maar zou je mij willen uitleggen hoe ik ook met sessions zo'n admin maak (alleen het beveiligen de rest kan ik weer ;))

alvast bedankt
 
Sure :).
In config.php zie je een variabele staan, $admin_pass. Dit is het wachtwoord die ingevuld moet worden zodat men toegang heeft tot het admin paneel.
Als er nog niets gepost is en er is ook nog geen sessie gezet, dan wordt er het formulier weergegeven, waar je een wachtwoord ingevuld. Dit formulier wordt verzonden met GET, dus het wachtwoord verschijnt gewoon in de titelbalk (nu ik dit zo typ bedenk ik dat ik dat beter via POST had kunnen doen, aangezien iedereen die meekijkt naar 't beeld van de admin het wachtwoord kan zien, maar goed :p).
Er is nu een $_GET["pass"], en dus komt hij door de eerste if(). Hier controleert hij of $_GET["pass"] gelijk is aan $admin_pass. Zo niet, geef foutmelding:
PHP:
  echo "Helaas...fout wachtwoord...<br><br>";
...en zo wel, maak een sessie aan met het wachtwoord als waarde, geef een bericht weer dat de persoon is ingelogd en stuur hem daarna door naar de admin pagina (gewoon de pagina herladen eigenlijk):
PHP:
  $_SESSION["password"] = $admin_pass;
  echo "Je bent nu ingelogd en wordt doorverwezen";
  echo "<meta http-equiv=refresh content=2;URL=\"admin.php\">";
  die();
Nou had ik natuurlijk ook gewoon $_SESSION["login"] = 1 kunnen doen, om aan te geven dat de persoon is ingelogd. Leuk en wel, maar dit is niet veilig. Zo maak je het voor hackers makkelijker om in te breken, wanneer ze echt én een sessie op de server moeten krijgen én de sessie het wachtwoord als waarde moeten meegeven wordt het een stuk lastiger voor hen maken. Wanneer de pagina doorgestuurd wordt gaat hij weer door de if(). $_GET["pass"] is nu niet gezet, dus de else komt erbij kijken. Er wordt gecontroleerd of er een sessie genaamd "password" bestaat. Zo nee, foutmelding. Zo ja, controleer of de waarde van die sessie gelijk is aan $admin_pass. Is die niet gelijk, foutmelding.
Elke keer als er een foutmelding optreed, volgt er een die();
Het laden van de pagina wordt hierbij afgebroken. Dus als alles goed gaat, sessie gezet, wachtwoord klopt, enz enz dan wordt de pagina niet afgebroken en wordt de pagina gewoon geladen, het admin paneel dus ;).

Dat was 't wel zo'n beetje ...
Als je vragen hebt, shoot :).

Succes :thumb:
 
hoe start ik hierna een sessie:

PHP:
<?php
$admin_pass == "pass";
if(empty($_POST))
{
	?>
	<form name="inlog" method="post" target="<?php echo $PHP_SELF;?>">
		<input name="pass" onclick="document.inlog.pass.value=''" type="password" value="wachtwoord" maxlength="20">
		<input type="submit" value="Login" name="submit">
	</form>
	<?php
}
else
{
	$form_pass = htmlspecialchars($_POST['pass']);
	if($form_pass != $admin_pass)
	{
		echo "Ga weg hacker!";
		die();
	}
	else
	{
 
PHP:
<?php
$admin_pass = "pass"; // == is voor vergelijking, = is voor toekennen, jij wil hier toekennen 
if(isset($_POST["pass"]) == FALSE)
{
  if(isset($_SESSION["pass"]) == TRUE)
  {
    if($_SESSION["pass"] == $admin_pass)
    {
    // persoon is geldig ingelogd
    die();
    }
    else
    {
    // persoon is niet geldig ingelogd
    die("Access denied");
    }
  }
  else
  {
  ?>
  <form name="inlog" method="post" target="<?php echo $_SERVER["PHP_SELF"]; /* $_SERVER["..."] */ ?>">
  <input name="pass" onclick="document.inlog.pass.value=''" type="password" value="wachtwoord" maxlength="20">
  <input type="submit" value="Login" name="submit">
  </form>
  <?php
  die();
  }
}
else
{
$form_pass = htmlspecialchars($_POST['pass']);
  if($form_pass != $admin_pass)
  {
  echo "Ga weg hacker!";
  die();
  }
  else
  {
  $_SESSION["pass"] = $form_pass;
  echo "Je bent nu ingelogd";
  die();
  }
}
Succes :thumb:
 
Laatst bewerkt:
ik heb het bericht van je nog niet gezien maar is dit wat:

PHP:
<?php
session_start();
$admin_pass = "pass";
?>
<html><head><title>admin</title></head>
<?php
$host = "Locale host";
$user = "ditiseenphptest";
$pass = "";
$db   = "ditiseenphptest_nl_db";

mysql_connect($host, $user, $pass);
mysql_select_db($db) or die("kon geen verbinding worden gemaakt");

function invoerveld()
{
	?>
	<form name="inlog" method="post" target="<?php echo $PHP_SELF;?>">
		<input name="pass" onclick="document.inlog.pass.value=''" type="password" maxlength="20">
		<input type="submit" value="Login" name="submit">
	</form>
	<?php
}
if(isset($_POST['pass']) == TRUE)
{
	$pass = htmlspecialchars($_POST['pass']);
	if($pass != $admin_pass)
	{
		echo "Ga weg hacker!";
		invoerveld();
		die();
	}
	else
	{
		$_SESSION["password"] = $admin_pass;
		echo "Je bent ingelogd en word doorverwezen.";
		echo "<meta http-equiv=refresh content=2;URL=\"admin.php\">";
		die();
	}
}
else
{
	if(isset($_SESSION["password"]) == FALSE)
	{
		invoerveld();
		die();
	}
	else
	{
		if($_SESSION["password"] != $admin_pass)
		{
			invoerveld();
			die();
		}
	}
}
echo "hoi!!";
?>
 
't Ziet er zeker niet slecht uit :).
Kan zo snel geen fouten vinden, ik zou zeggen: test 't uit.
 
Het werkt :D

ga er vanmiddag de mysql query inzetten die berichten uit de shoutbox kan verweideren ;)
 
nog een vraagje,

doe ik dit script in een simpele link:

PHP:
session_unset();
session_destroy();
 
Ik zie de vraag niet echt, maar dat kleine scriptje wordt gebruikt voor uitloggen bij een sessie-inlogsysteem :).
Beetje overbodig trouwens, wanneer de bezoeker het venster sluit is de bezoeker ook uitgelogd ;).
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan