Nieuw lid |
|
Ik heb het inlogscript met sessies van deze site gedownload, maar als ik ingelogd ben, dan zegt hij 'header already sent' Hieronder staat mijn script.
Aanmeld.php
<?php
require("connect.php");
?>
<html>
<head>
<title>Aanmelden</title>
</head>
<body>
<?php
// als het formulier nog niet is ingevuld
if(!isset($_POST['submit'])) {
?>
<form action="aanmeld.php" method="post">
<table style='width:500;'>
<tr>
<td style='width:100;'>
Naam:
</td>
<td>
<input type="text" name="naam" size="50" maxlength="20">
</td>
</tr>
<tr>
<td style='width:100;'>
Wachtwoord:
</td>
<td>
<input type="password" name="wacht1" size="50" maxlength="30">
</td>
</tr>
<tr>
<td>
Wachtwoord Opnieuw:
</td>
<td>
<input type="password" name="wacht2" size="50" maxlength="30">
</td>
</tr>
</table>
<input type="submit" name="submit" value="Verstuur gegevens">
</form>
<?php
} elseif(trim($_POST['naam']) <> "" && trim($_POST['wacht1']) <> "") {
$naam = $_POST['naam'];
$res = mysql_query("SELECT * FROM users WHERE name='".$naam."'") or die(mysql_error());
if(mysql_num_rows($res) == 0) {
if(!strcmp($_POST['wacht1'], $_POST['wacht2'])) {
$wacht = md5($_POST['wacht1']);
$level = 1;
mysql_query("INSERT INTO users (name, pass, level) VALUES ('".$naam."','".$wacht."',".$level.")") or die(mysql_error());
?>
Je gegevens zijn opgeslagen.<br>
Je kunt <a href="login.php">hier</a> naar toe om in te loggen.<br>
<?php
} else {
// wachtwoorden komen niet overeen
?>
De twee opgegeven wachtwoorden zijn niet hetzelfde.<br>
Druk op de "back" knop van je browser en voer twee identieke wachtwoorden in.<br>
<?php
}
} else {
// er bestaat al een gebruiker met deze naam
?>
Er bestaat al een gebruiker met deze naam.<br>
Druk op de "back" knop van je browser en geef een andere naam op.<br>
<?php
}
} else {
// sommige velden zijn niet ingevuld
?>
Alle velden dienen ingevuld te worden.<br>
Druk op de "back" toets en vul in alle velden wat in.<br>
<?php
}
?>
</body>
</html>
<?php require("connect.php"); ?> <html> <head> <title>Aanmelden</title> </head> <body> <?php // als het formulier nog niet is ingevuld if(!isset($_POST['submit'])) { ?> <form action="aanmeld.php" method="post"> <table style='width:500;'> <tr> <td style='width:100;'> Naam: </td> <td> <input type="text" name="naam" size="50" maxlength="20"> </td> </tr> <tr> <td style='width:100;'> Wachtwoord: </td> <td> <input type="password" name="wacht1" size="50" maxlength="30"> </td> </tr> <tr> <td> Wachtwoord Opnieuw: </td> <td> <input type="password" name="wacht2" size="50" maxlength="30"> </td> </tr> </table> <input type="submit" name="submit" value="Verstuur gegevens"> </form> <?php } elseif(trim($_POST['naam']) <> "" && trim($_POST['wacht1']) <> "") { $naam = $_POST['naam']; if(!strcmp($_POST['wacht1'], $_POST['wacht2'])) { $wacht = md5($_POST['wacht1']); $level = 1; ?> Je gegevens zijn opgeslagen.<br> Je kunt <a href="login.php">hier</a> naar toe om in te loggen.<br> <?php } else { // wachtwoorden komen niet overeen ?> De twee opgegeven wachtwoorden zijn niet hetzelfde.<br> Druk op de "back" knop van je browser en voer twee identieke wachtwoorden in.<br> <?php } } else { // er bestaat al een gebruiker met deze naam ?> Er bestaat al een gebruiker met deze naam.<br> Druk op de "back" knop van je browser en geef een andere naam op.<br> <?php } } else { // sommige velden zijn niet ingevuld ?> Alle velden dienen ingevuld te worden.<br> Druk op de "back" toets en vul in alle velden wat in.<br> <?php } ?> </body> </html>
session.php
<?php
session_start();
if(isset($_SESSION['suser'])) {
$now = time();
if($now - $_SESSION['stime'] > $_SESSION['smaxidle']) {
$_SESSION = array();
session_destroy();
} else {
$_SESSION['stime'] = $now;
}
} elseif(isset($_COOKIE['login_cookie'])) {
list($id, $wacht) = split(";", $_COOKIE['login_cookie']);
$res = mysql_query("SELECT id, pass, level, last_ip FROM users WHERE id='".$id."'") or die(mysql_error());
if(mysql_num_rows($res) > 0) {
$row = mysql_fetch_assoc($res);
if(!strcmp($wacht, $row['pass']) && $_SERVER['REMOTE_ADDR'] == $row['last_ip']) {
$_SESSION['suser'] = $naam;
$_SESSION['slevel'] = $row['level'];
$_SESSION['stime'] = time();
$_SESSION['smaxidle'] = 60 * 60;
setcookie("login_cookie", $id.";".$wacht, time()+3600*24*31*2, "/");
} else {
setcookie("login_cookie", "", time(), "/");
$_SESSION = array();
session_destroy();
}
unset($row);
mysql_free_result($res);
} else {
$_SESSION = array();
session_destroy();
}
header("Location: ".$_SERVER['REQUEST_URI']);
}
?>
<?php if(isset($_SESSION['suser'])) { if($now - $_SESSION['stime'] > $_SESSION['smaxidle']) { } else { $_SESSION['stime'] = $now; } } elseif(isset($_COOKIE['login_cookie'])) { list($id, $wacht) = split(";", $_COOKIE['login_cookie']); if(!strcmp($wacht, $row['pass']) && $_SERVER['REMOTE_ADDR'] == $row['last_ip']) { $_SESSION['suser'] = $naam; $_SESSION['slevel'] = $row['level']; $_SESSION['stime'] = time(); $_SESSION['smaxidle'] = 60 * 60; setcookie("login_cookie", $id.";".$wacht, time()+3600*24*31*2, "/"); } else { } } else { } header("Location: ".$_SERVER['REQUEST_URI']); } ?>
logout.php
<?php
session_start(); // start een sessie of zet een sessie voort
$_SESSION = array(); // maak het sessie array leeg
session_destroy(); // verwijder de sessie
// als er een cookie geset is, reset deze
if(isset($_COOKIE['login_cookie'])) {
setcookie("login_cookie", "", time(), "/");
}
?>
<html>
<head>
<title>Log Uit</title>
</head>
<body>
U bent uitgelogd.<br />
<a href="voorbeeld.php">voorbeeld pagina</a><br />
<a href="login.php">(opnieuw) inloggen</a><br />
</body>
</html>
<?php $_SESSION = array(); // maak het sessie array leeg // als er een cookie geset is, reset deze if(isset($_COOKIE['login_cookie'])) { } ?> <html> <head> <title>Log Uit</title> </head> <body> U bent uitgelogd.<br /> <a href="voorbeeld.php">voorbeeld pagina</a><br /> <a href="login.php">(opnieuw) inloggen</a><br /> </body> </html>
connect.php
<?php
$host = "localhost"; // je hostname, meestal localhost
$user = "root"; // je username
$pass = ""; // je wachtwoord
$dbas = "lochuizen_v6"; // je database-naam
// connect naar database
if(mysql_connect($host, $user, $pass)) {
// selecteer database
mysql_select_db($dbas) or die(mysql_error());
} else {
// connecten naar database is mislukt
echo "Failed to connect to database.";
exit;
}
?>
<?php $host = "localhost"; // je hostname, meestal localhost $user = "root"; // je username $pass = ""; // je wachtwoord $dbas = "lochuizen_v6"; // je database-naam // connect naar database // selecteer database } else { // connecten naar database is mislukt echo "Failed to connect to database."; } ?>
voorbeeld.php
<?php
require ("connect.php");
require("session.php");
?>
<html>
<head>
<title>sessies · voorbeeld</title>
</head>
<body>
<?php
/*
we gaan hier kijken of de gebruiker is ingelogd, en welk
user level de gebruiker heeft. Op grond daarvan laten we
bepaalde delen al dan niet zien.
Een gebruikerslevel is een getal wat aangeeft hoeveel
"macht" je hebt. Vaak is het zo: hoe hoger het getal, hoe
meer je mag.
bijvoorbeeld:
Voor een bepaalde bewerking heb je gebruikers-
niveau 1 nodig, maar voor een andere bewerking heb je niveau
2 nodig. Een gebruiker die beide bewerkingen mag uitvoeren
heeft gebruikersniveau 1+2 = 3. MAAR: Een gebruiker die om
een of andere reden alleen de tweede bewerking mag uitvoeren
heeft gebruikersniveau 0+2 = 2. Dus je telt de nummers die
bij bepaalde rechten horen bij elkaar op.
Het nummer dat het recht geeft op een bepaalde bewerking is
altijd een macht van 2.
bijvoorbeeld:
recht #1 (bv inloggen) heeft gebruikers niveau 2^0 = 1
recht #2 (bv je eigen info veranderen) heeft gebr. niveau 2^1 = 2
recht #3 (bv nieuws toevoegen) heeft gebruikers niveau 2^2 = 4
recht #4 (bv members toevoegen) heeft gebruikersniveau 2^3 = 8
enz.
Iemand die al deze bewerkingen mag uitvoeren heeft dus
gebruikersniveau 1+2+4+8 = 15 (of 2^4 - 1)
Iemand die alleen recht #1 en recht #3 heeft, heeft
dus gebruikersniveau 1+4 = 5
*/
// controle op ingelogd zijn:
if(isset($_SESSION['suser'])) {
?>
user <b><?= $_SESSION['suser'] ?></b> is logged in.<br />
<?php
// vervolgens kijken we naar het userlevel, we vergelijken
// bitsgewijs het gebruikerslevel - dit doen we met behulp van
// een enkele '&' (de bitwise comparator)
if($_SESSION['slevel'] & 1) {
// voer code uit behorend bij recht #1
?>
Je hebt recht #1.<br />
<?php
} else {
// geef een melding dat je de acties
// behorend bij recht #1 niet mag uitvoeren
?>
Je hebt recht #1 NIET.<br />
<?php
}
if($_SESSION['slevel'] & 2) {
// voer code uit behorend bij recht #2
?>
Je hebt recht #2.<br />
<?php
} else {
?>
Je hebt recht #2 NIET.<br />
<?php
}
if($_SESSION['slevel'] & 4) {
// voer code uit behorend bij recht #3
?>
Je hebt recht #3.<br />
<?php
} else {
?>
Je hebt recht #3 NIET.<br />
<?php
}
if($_SESSION['slevel'] & 8) {
// voer code uit behorend bij recht #4
?>
Je hebt recht #4.<br />
<?php
} else {
?>
Je hebt recht #4 NIET.<br />
<?php
}
// et cetera
?>
<a href="logout.php">uitloggen</a><br />
<?php
} else {
?>
Je bent op dit moment niet ingelogd.<br />
<a href="login.php">inloggen</a><br />
<?php
}
?>
</body>
</html>
<?php require ("connect.php"); require("session.php"); ?> <html> <head> <title>sessies · voorbeeld</title> </head> <body> <?php /* we gaan hier kijken of de gebruiker is ingelogd, en welk user level de gebruiker heeft. Op grond daarvan laten we bepaalde delen al dan niet zien. Een gebruikerslevel is een getal wat aangeeft hoeveel "macht" je hebt. Vaak is het zo: hoe hoger het getal, hoe meer je mag. bijvoorbeeld: Voor een bepaalde bewerking heb je gebruikers- niveau 1 nodig, maar voor een andere bewerking heb je niveau 2 nodig. Een gebruiker die beide bewerkingen mag uitvoeren heeft gebruikersniveau 1+2 = 3. MAAR: Een gebruiker die om een of andere reden alleen de tweede bewerking mag uitvoeren heeft gebruikersniveau 0+2 = 2. Dus je telt de nummers die bij bepaalde rechten horen bij elkaar op. Het nummer dat het recht geeft op een bepaalde bewerking is altijd een macht van 2. bijvoorbeeld: recht #1 (bv inloggen) heeft gebruikers niveau 2^0 = 1 recht #2 (bv je eigen info veranderen) heeft gebr. niveau 2^1 = 2 recht #3 (bv nieuws toevoegen) heeft gebruikers niveau 2^2 = 4 recht #4 (bv members toevoegen) heeft gebruikersniveau 2^3 = 8 enz. Iemand die al deze bewerkingen mag uitvoeren heeft dus gebruikersniveau 1+2+4+8 = 15 (of 2^4 - 1) Iemand die alleen recht #1 en recht #3 heeft, heeft dus gebruikersniveau 1+4 = 5 */ // controle op ingelogd zijn: if(isset($_SESSION['suser'])) { ?> user <b><?= $_SESSION['suser'] ?></b> is logged in.<br /> <?php // vervolgens kijken we naar het userlevel, we vergelijken // bitsgewijs het gebruikerslevel - dit doen we met behulp van // een enkele '&' (de bitwise comparator) if($_SESSION['slevel'] & 1) { // voer code uit behorend bij recht #1 ?> Je hebt recht #1.<br /> <?php } else { // geef een melding dat je de acties // behorend bij recht #1 niet mag uitvoeren ?> Je hebt recht #1 NIET.<br /> <?php } if($_SESSION['slevel'] & 2) { // voer code uit behorend bij recht #2 ?> Je hebt recht #2.<br /> <?php } else { ?> Je hebt recht #2 NIET.<br /> <?php } if($_SESSION['slevel'] & 4) { // voer code uit behorend bij recht #3 ?> Je hebt recht #3.<br /> <?php } else { ?> Je hebt recht #3 NIET.<br /> <?php } if($_SESSION['slevel'] & 8) { // voer code uit behorend bij recht #4 ?> Je hebt recht #4.<br /> <?php } else { ?> Je hebt recht #4 NIET.<br /> <?php } // et cetera ?> <a href="logout.php">uitloggen</a><br /> <?php } else { ?> Je bent op dit moment niet ingelogd.<br /> <a href="login.php">inloggen</a><br /> <?php } ?> </body> </html>
login.php
<?php
session_start();
require("connect.php");
if(isset($_POST['login'])) {
if(trim($_POST['naam']) <> "" && trim($_POST['wacht']) <> "") {
$naam = $_POST['naam'];
$wacht = md5($_POST['wacht']);
$res = mysql_query("SELECT id, pass, level FROM users where name='".$naam."'") or die(mysql_error());
if(mysql_num_rows($res) > 0) {
$row = mysql_fetch_assoc($res);
if(!strcmp($wacht, $row['pass'])) {
if(isset($_POST['memory'])) {
setcookie("login_cookie", $row['id'].";".$row['pass'], time()+3600*24*31*2, "/");
$ip = $_SERVER['REMOTE_ADDR'];
mysql_query("UPDATE users SET last_ip='".$ip."' WHERE id=".$row['id']) or die(mysql_error());
}
$_SESSION['suser'] = $naam; // gebruikersnaam van ingelogd persoon
$_SESSION['slevel'] = $row['level']; // bijbehorende gebruikersniveau
$_SESSION['stime'] = time(); // de huidige tijd
$_SESSION['smaxidle'] = 60 * 60; // het aantal seconden inactiviteit
} else {
$_SESSION = array();
session_destroy();
}
unset($row);
mysql_free_result($res);
}
header("Location: login.php");
}
}
echo("
<html>
<head>
<title>Log in</title>
</head>
<body>
");
if(!isset($_SESSION['suser'])) {
echo("
<form action='login.php' method='post'>
<table style='width:500;'>
<tr>
<td style='width:100;'>
Naam:
</td>
<td>
<input type='text' name='naam' size='50'>
</td>
</tr>
<tr>
<td style='width:100;'>
Wachtwoord:
</td>
<td>
<input type='password' name='wacht' size='50'>
</td>
</tr>
<tr>
<td colspan='2'>
<input type='checkbox' name='memory' value='1'> Blijf Ingelogd
</td>
</tr>
<tr>
<td colspan='2'>
<input type='submit' name='login' value='log in'>
</td>
</tr>
</table>
</form>
");
} else {
echo("
Hi <b>
");
?>
<?= $_SESSION['suser'] ?>
<?php
echo("
</b>,<br>
<a href='voorbeeld.php'>voorbeeld pagina</a><br>
<a href='logout.php'>uitloggen</a><br>
");
}
?>
</body>
</html>
<?php require("connect.php"); if(isset($_POST['login'])) { if(trim($_POST['naam']) <> "" && trim($_POST['wacht']) <> "") { $naam = $_POST['naam']; $wacht = md5($_POST['wacht']); if(!strcmp($wacht, $row['pass'])) { if(isset($_POST['memory'])) { setcookie("login_cookie", $row['id'].";".$row['pass'], time()+3600*24*31*2, "/"); $ip = $_SERVER['REMOTE_ADDR']; } $_SESSION['suser'] = $naam; // gebruikersnaam van ingelogd persoon $_SESSION['slevel'] = $row['level']; // bijbehorende gebruikersniveau $_SESSION['stime'] = time(); // de huidige tijd $_SESSION['smaxidle'] = 60 * 60; // het aantal seconden inactiviteit } else { } } header("Location: login.php"); } } <html> <head> <title>Log in</title> </head> <body> "); if(!isset($_SESSION['suser'])) { <form action='login.php' method='post'> <table style='width:500;'> <tr> <td style='width:100;'> Naam: </td> <td> <input type='text' name='naam' size='50'> </td> </tr> <tr> <td style='width:100;'> Wachtwoord: </td> <td> <input type='password' name='wacht' size='50'> </td> </tr> <tr> <td colspan='2'> <input type='checkbox' name='memory' value='1'> Blijf Ingelogd </td> </tr> <tr> <td colspan='2'> <input type='submit' name='login' value='log in'> </td> </tr> </table> </form> "); } else { Hi <b> "); ?> <?= $_SESSION['suser'] ?> <?php </b>,<br> <a href='voorbeeld.php'>voorbeeld pagina</a><br> <a href='logout.php'>uitloggen</a><br> "); } ?> </body> </html>
|