Archief - Php: login herscripted

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

WiCk3y

Legacy Member
Ik heb vroeger login script geschreven en dat werkte perfect. Nadeel was na elke nieuwe page moest je opnieuw inloggen.

Nu heb opnieuw eentje wille schrijven en je blijft ingelogt( heb cookies ontdekt xD). Nu zie ik dus van je bent ingelogt etc...

Nu zit ik vast! Ik zou namelijk mijn login form moete laten verdwijnen en mijn text laten zien. Ik heb al gedacht aan if structuur maar geraak er niet uit! :(

Code :
Login form:
PHP:
<form action="login.php" method="post">
Username: <input type="text" name="username" size="20"><br>
Password: <input type="password" name="password" size="20"><br>
<input type="submit" value="Log In">
</form>

Login code :

PHP:
<?php
ob_start();

include("config.php");

// connect to the mysql server
$link = mysql_connect($db_host, $db_username, $db_password)
or die ("Could not connect to mysql because ".mysql_error());

// select the database
mysql_select_db($db_name)
or die ("Could not select database because ".mysql_error());

$match = "select id from $table where username = '".$_POST['gamer_login']."'
and password = '".$_POST['gamer_paswoord']."';";

$qry = mysql_query($match)
or die ("Could not match data because ".mysql_error());
$num_rows = mysql_num_rows($qry);

if ($num_rows <= 0) {
echo "Sorry, there is no username $username with the specified password.<br>";
echo "<a href=index.php>Try again</a>";
exit;
} else {

setcookie("loggedin", "TRUE", time()+(3600 * 24));
setcookie("mysite_username", "$username");
echo "You are now logged in!<br>";
echo "<a href=index.php>Continue</a>.";
}
ob_end_flush();
?>

Read cookie shit:

PHP:
<?php
if (!isset($_COOKIE['loggedin'])) die("You are not logged in!");
$mysite_username = $HTTP_COOKIE_VARS["mysite_username"];
echo "you are logged in as $mysite_username.<p>";
?>

glox

Legacy Member
Onveiliger kan het niet.

Als je gewoon een cookie "loggedin" maakt in je browser -> voila: ingelogd :niceone:

Mijn hint: gebruik sessies om zoiets op te slaan. Beter nog: sla username en password (md5 hashed of dergelijke) op in een sessie, en valideer het zoveel mogelijk (meestal wordt het mee gevalideert bij het ophalen van de gebruikersgegevens, dus op elke pagina). Probeer voor een login systeem zoveel mogelijk cookies te vermeiden (behalve de php sessie cookies natuurlijk).

|M°B|Morbuus

Legacy Member
Dit is mijn login

Tis missch bekke noobisch gemaakt ma so


PHP:
<?php
session_start();
function inlogform () {
	?>
  <table class="item"> 
   <form method="post" action="">

    <tr>
     <td>Naam:</td><td><input type="text" name="naam"></td>
    </tr>
    <tr>
     <td>Wachtwoord:</td><td><input type="password" name="wachtwoord"></td>
    </tr>
    <tr>
     <td></td><td><input type="submit" value="Inloggen" name="login"></td> 

    </tr>

   </form> 
</table>

<?
}
if ($_SESSION['naam']) {
	header("Location: /admin");
} else {
if ($_POST['login']) {
			   if($_POST['naam'] != "" AND $_POST['wachtwoord'] != "") {
					$sql = "SELECT * FROM ... tabel ... WHERE naam='".$_POST['naam']."'";
					
					$resultaat = mysql_query($sql) OR die ("$mysqlerror");
					$rij = mysql_fetch_object($resultaat);
					$dbpass = htmlspecialchars($rij->wachtwoord);
					$pass = md5($_POST['wachtwoord']);
					$userid = $rij->id;
					if($dbpass == $pass) {
						  $_SESSION['userid'] = $userid;
						  $_SESSION['naam'] = $_POST['naam'];			 
						  header("Location: /admin");
					
					}else{
					 echo "<b>Je wachtwoord en/of naam is incorrect!</b>";
						inlogform();
					}
			   }else{
				echo "<b>Je bent een veld vergeten in te vullen!</b>";
				inlogform();
			   }
		} else {
			inlogform();
		}
}

?>

Als je nu bv een beveiligde pagina wilt maken dan doe je gewoon

if ($_SESSION['naam']) {
echo "blabla";
} else {
echo "niet gemachtigd";
}

Qualistor

Legacy Member
idd met sessies werken is het gemakkelijkst denk ik zoals |M°B|Morbuus ;)
mijn loginscript die ik gemaakt heb gebruikt dit ook .. enkel niet vergeten bij het uitloggen de sessie te distroyen :)

grtz

Dece

Legacy Member
gebruik db sessies, die zijn nog veiliger!
Methode:
1) Maak een random session id id (md5() en uniqid() should do)
2) Indien user ingelogged is neemde hem op met zn member_id / ip / session_id.
3) Schrijf een cookie met zijn session_id en eventueel eentje met zn member_id + paswoord
4) Controlleer aan de hand van de session_id of hij ingelogged is

Fraggie

Legacy Member
is er iemand die mijn brol eens wil bekijken?

systeem:
db's ->
users (id, name, email ..)
logins (id, unieke key, datum dat cookie gemaakt is)

bij de eerste login maak ik een unieke key aan die in in een cookie zet samen met zijn user id,
klopt de info dan zet ik een session & doe ik zo verder

komt hij na het sluiten van zijn browser terug, dan kijk ik of de unieke key overeen komt met die in de db (adhv user id)

een key blijft maar 3 dagen geldig, idem voor een cookie (die ik stilletjes ververs)


en nee ik heb nooit een php boek gekocht ofzo dus het is 'rommel scripting':

login.php
PHP:
<?
session_start();
if (empty($_POST['name']) OR empty($_POST['pass']) OR isset($_SESSION['log'])) { exit ("Error"); }
else {
 require('config.php');
 $pass = md5(md5($_POST['pass']));
 if (!con_db()) { exit("<a href='index.php'>db error</a>"); }
 else {
  $query = mysql_query("SELECT id,name,pass,flag FROM users WHERE name='$_POST[name]'");
  $show = mysql_fetch_array($query);

   if (($show['name'] == $_POST['name']) AND ($show['pass'] == $pass) AND ($show['flag'] !== "banned")) {
    $_SESSION['name'] = $show['id'];
    $_SESSION['flag'] = $show['flag'];
    echo "<script type='text/javascript'>window.location = 'cookie.php?action=create'</script>";

    header('location: cookie.php?action=create');
   }
   else { exit ("<meta http-equiv='refresh' content='0;url=index.php'>"); }
  }
}
?>

cookie.php
PHP:
<?
session_start();
if(empty($_GET['action']) OR empty($_SESSION['name'])) { exit ("Error"); } //pagina verbergen
elseif ($_GET['action'] == "create") {
 ob_start();
 require('config.php');
 if (!con_db()) { exit("db error"); }
 else {
 $query = mysql_query("SELECT ukey,user_id FROM logins WHERE user_id='$_SESSION[name]'");
 $show = mysql_fetch_array($query);

 setcookie("id", "$show[user_id]", time()+3600);
 setcookie("ukey", "$show[ukey]", time()+3600);
 $_SESSION['log'] = "1"; //nu pas zijn ze echt ingelogt..
 echo "<b>Cookie created</b><meta http-equiv='refresh' content='3;url=index.php'>";
 ob_end_flush();
 }
}
elseif ($_GET['action'] == "delete") {
 unset ($_SESSION['log']);
 unset ($_SESSION['name']);
 session_destroy();
 
 setcookie("id", "", time()+1); //cookies deleten
 setcookie("ukey", "", time()+1);
 echo "<b>Cookie deleted</b><meta http-equiv='refresh' content='3;url=index.php'>";
}
else { exit ("<meta http-equiv='refresh' content='0;url=index.php'>"); };
?>

config.php (eigelijk functions.php)
PHP:
<?
function con_db()
{
 $host_ = "localhost";
 $user_ = "";
 $pass_ = "";
 $db_ = "site";
 $db = mysql_connect("$host_","$user_","$pass_");
 $db_select = mysql_select_db($db_,$db);
 if ($db_select) {
  return $db_select;
 }
 else {
  return false;
 }
}

function check_login()
{
if (con_db()) {
ob_start();
session_start();
 if (isset($_SESSION['log'])) { return true; exit; }
 elseif (isset($_COOKIE['id']) AND isset($_COOKIE['ukey'])) {
  $date = date("Ymd");
  $query_users = mysql_query("SELECT flag FROM users WHERE id='$_COOKIE[id]'");
  $query_logins = mysql_query("SELECT * FROM logins WHERE user_id='$_COOKIE[id]'");
  $show_users = mysql_fetch_array($query_users);
  $show_logins = mysql_fetch_array($query_logins);
  if ($show_logins['ukey'] !==  $_COOKIE['ukey'] OR $show_users['flag'] == "banned") { return false; exit; } //foute code of geband
  else {
   if ($show_logins['cookie_date'] <= $date AND $date-$show_logins['cookie_date'] <= 3) { //cookie is jong genoeg & inloggen
     $_SESSION['name'] = $show_logins['user_id'];
     $_SESSION['flag'] = $show_users['flag'];
     $_SESSION['log'] = "1";
     return true; exit;
    }
   else { //cookie verversen dan maar?
      require('gen_pass.php');
      $ukey = md5(rand(0,9999).$gen_pass);

      mysql_query("UPDATE logins SET cookie_date='$date', ukey='$ukey' WHERE user_id='$_COOKIE[id]' LIMIT=1;");
      setcookie("id", "$show_logins[user_id]", time()+3600*24*3);
      setcookie("ukey", "$ukey", time()+3600*24*3);
      
      $_SESSION['name'] = $show_logins['user_id'];
      $_SESSION['flag'] = $show_users['flag'];
      $_SESSION['log'] = "1";
      return true; exit;
     }
   }
 }
 else { return false; }  //niet ingelogt..
 }
 ob_end_flush();
}
?>
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan