Archief - PHP: login script help

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.

Spacy2003

Legacy Member
Ik heb op google al gezocht naar login scriptjes en hoe ze werkten.
Maar heb er telkens bitter weinig van begrepen.
Wat ik uit die scriptjes leer is dat ze gebruik maken van sessions, wat ik daar uit afleid is dat dit een soort $_POST is die in de plaats van 1 pagina een tijd meegaat totdat dit opgezegd of dat die tijd verlopen is.

Ben ik tot nu toe juist ?

Maar ik kan er niet goed aan uit door alle functions die ze erin zetten (bv om tot mysql te connecten).
Het is redelijk lastig om te weten wat een variabele inhoud als je telkens op een andere pagina moet gaan kijken.

Nu zou ik dit login systeem zelf willen schrijven en toepassen op mijn site, ik heb dus al een register systeem waarbij de users alsvolgt wordt weggeschreven (table = members)

PHP:
msql_query("INSERT INTO members (nick, name, surname, email, password) VALUES('me', 'mijnnaam', 'achternaam', '[email protected]', '123')");

Nu zou ik dit alsvolgt doen een form maken met daarin login en password, dan via een action het op een andere pagina via een $_POST dat in een session zetten.

Maar hier komt nu mijn vraag (heb bitter weinig tot geen ervaring met sessions) en heb geen idee hoe hieraan te beginnen.

Heb dus gelezen dat je altijd moet beginnen met session_start() but thats it !
Heeft iemand goede recources ivm sessions, of wilt iemand mij persoonlijk helpen ?


Wat ik tot nu toe heb:
Register
Members list + textbased portfolio
Search functie

Thnx advance Spacy ;)

The Patriot

Legacy Member
Oh Spacy moestek php gelijk gij kunnen :) kzou u wel helpen maar ik kan der eigenlijk echt niet te vel veel van :) dus veel kannek nie doen zeker ?

Col.Kurtz

Legacy Member
Jep, starten met session_start(); (elke pagina)

iets in een sessie steken : $_SESSION['id']=5;
iets uit een sessie halen : print $_SESSION['id'];
iets uit een sessie verwijderen : unset($_SESSION['id']);

Nu voor het inloggen... :)

Wat sla je best op in een session en cookie : userid en een unieke geencrypteerde string samengesteld uit combinatie van userid, username en IP.
Dit kan je doen via md5();

Moest je md5 niet kennen, het is een 1-way encryptie, je kunt van een md5 hash dus niet de originele waarde opvragen (botgewijs wel uiteraard).

Waarom deze unieke string opslaan ? Als id en die md5 zijn opgeslagen in cookies,
en er komt een gebruiker terug op je site (die al eens heeft ingelogd), kan je checken of er een gebruiker bestaat waarvan de combinatie userid (uit cookie) + username gelijk is aan je md5

= veilig

Van zodra dit niet overeenkomt delete je beide cookies...

Het is misschien wel veel en complex wat ik hier allemaal type, maar wel veilig :) (session/cookie data is makkelijk te bekomen)

Chinees ? Ik zal dan wel een voorbeeldje posten ;)

Ook niet vergeten als je user input gebruikt :
als get_magic_quotes_gpc NIET aanstaat, moet je addslashes doen bij je user input (of dit aanstaat kan je checken met phpinfo())

$user = addslashes($_POST['user']);

Waarom ? Via SQL injection bestaat de mogelijkhij om heek jou database uit te pluizen/data lezen enz, zelfs alles verwijderen...

Meer hierover :
http://82.150.156.163/artikelen.php?aid=106 -> goed artikel over veiligheid
http://www.yapf.net -> deze is heel goed

Hier ben je wel ff zoet mee :D :D

killgore

Legacy Member
Dunno ze, maar het enige echte belangerijke dat je doet op post vars is:
htmlspecialchars als je dit later moet weergeven en je layout niet wilt fucked up zien
mysql_escape_string Om sql-injection te vermijden.
Veel andere zaken heb je niet nodig, valt nog een beetje te zien wat je er op php-niveau wilt mee doen.

magic quotes kan je btw veeeeeel simpeler checken dan met phpinfo(): get_magic_quotes_gpc

maT'

Legacy Member
doet mysql_escape_string veel meer dan addslashes() ?
ze lijken me exact hetzelfde te doen :unsure:

Spacy2003

Legacy Member
Ok, heb nog even wat tijd vrijgemaakt om mij bij het loginscript bezig te houden !

Even wat uitleg bij het login proces:
Via een $_POST haal ik het username en password op, dit laat ik addslashen als magic_quotes niet aan staat.
Dan loop ik mijn mysql table af op zoek naar de juiste nickname en laat deze dan het paswoord uit de DB vergelijken met de geposte versie.
Het paswoord wordt dan md5 gecodeerd en wrdt dan in een cookie gezet maar hier zit het probleem.
Hij geeft bij het inloggen met het juiste paswoord een error :

Warning: Cannot modify header information - headers already sent by (output started at /home/spacy/public_html/beta/login/login.php:9) in /home/spacy/public_html/beta/login/login.php on line 28

De middenste lijn is lijn 28:

PHP:
$cookie = $md5 . '_' . $row['id'];
		setcookie('kvisual_user', '$cookie', time()+7200);
		echo "<p align='center'>U are Succesfully logged in !</p>";}

Ik zou ook nog graag de sessions hierin verwerken maar telkens als ik session_start() in type dan geeft hij een error en verwijst hij naar de plaats waar ik mijn session gedefinieerd heb.

Hier is de volledige login code (buiten de mysql connect ffcourse :p )

PHP:
$nick = $_POST['nick'];
$pass = $_POST['pass'];

if (!ini_get('magic_quotes_gpc')){
  $nick = addslashes($nick);
  $pass = addslashes($pass);}
  
$result = mysql_query("SELECT * FROM members WHERE nick='$nick'");

while($row = mysql_fetch_array($result)){
 	if($pass == $row['password']){
		$md5 = md5($pass);
		$cookie = $md5 . '_' . $row['id'];
		setcookie('kvisual_user', '$cookie', time()+7200);
		echo "<p align='center'>U are Succesfully logged in !</p>";}
	else {
		echo "<p align='center'>Login failed !</p><a align='center' href='index.php'>Please try again !</a>";}
}

thnx in advance spacy ;)

Col.Kurtz

Legacy Member
een header() kan je niet uitvoeren als er al output is,
dus je form valideren in een aparte pagina

Spacy2003

Legacy Member
Col.Kurtz zei:
een header() kan je niet uitvoeren als er al output is,
dus je form valideren in een aparte pagina

Dit doe ik toch of niet ?
Ik heb mijn form staan op index.php en dan laat ik dat posten naar login.php die het verwerkt, of zit ik mis ?

Col.Kurtz

Legacy Member
Spacy2003 zei:
Dit doe ik toch of niet ?
Ik heb mijn form staan op index.php en dan laat ik dat posten naar login.php die het verwerkt, of zit ik mis ?
Weet ik niet, de code waar die header staat heb je niet gepost :)

Spacy2003

Legacy Member
Col.Kurtz zei:
Weet ik niet, de code waar die header staat heb je niet gepost :)

Ik volg je even niet, wat heeft een header met een cookie te maken ?
Een cookie wordt toch verzonden naar de browser van de user, of zit ik weer mis ?

Col.Kurtz

Legacy Member
Spacy2003 zei:
Ik volg je even niet, wat heeft een header met een cookie te maken ?
Een cookie wordt toch verzonden naar de browser van de user, of zit ik weer mis ?
echo "....."

mag niet

Spacy2003

Legacy Member
Waar mogen de echo's niet staan ? (mss domme vraag tho)
Ik heb dus alle echo's verwijderd uit login.php but still the error remains :)

Spacy2003

Legacy Member
hmm dus eigenlijk al deze crap:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="StyleSheet" type="text/css" href="main.css">
<title>Members: validate</title>
</head>

Mag pas na de <?php ?> tags komen ?
Am i correct ?

//edit guess so cause error is gone ... could kiss you :love:

Col.Kurtz

Legacy Member
Spacy2003 zei:
hmm dus eigenlijk al deze crap:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="StyleSheet" type="text/css" href="main.css">
<title>Members: validate</title>
</head>

Mag pas na de <?php ?> tags komen ?
Am i correct ?

//edit guess so cause error is gone ... could kiss you :love:


Da moet er gewoon niet staan, dat is onnodig, validatie paginas zijn heel kort en bestaan enkel uit php code
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