PHP/MYSQL Inlog functie

Door Robin , 24 jaar geleden, 12.170x bekeken

Inlog functie met database backend, bewaart lokaal cookie met unieke md5 hash.

Je gebruikt het als volgt:

// header (bovenkant) van je layout

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?

include("config.php"); //plaats hier db connectie in
include("session.php"); //plaats hier onderstaand PHP script / functie in

$website    ='hozee';    
$domain        ='www.hozee.org';        
$path        ='';        
$expire        ='10000';
$user = usersession($website,$domain,$path,$expire);


//ergens in de body van het index bestand waar je formulier wilt plaatsen

if (!$user['name'])
{

    echo "<form name=\"form1\" method=\"post\" action=\"?action=login\">";

    echo "Name <input type=\"text\" name=\"name\"> ";
    echo "Pass <input type=\"password\" name=\"pass\"><input type='submit' value=\"submit\" alt=\"login\" name=\"login\">";

    echo "</form>";
}

else
{
    echo "Welkom " . $user['name'] . "<a href=\"?action=logout\">uitloggen</a>";
}

?>


// footer (onderkant) van je layout

Voorbeeld: http://

Gesponsorde koppelingen

PHP script bestanden

  1. phpmysql-inlog-functie

 

Er zijn 49 reacties op 'Phpmysql inlog functie'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
Voorbeeld zou redelijk zinloos zijn. Voor het gewoon je de headers send Documentatie is helder genoeg. Owja wel uitvoeren/senden tegelijk met de andere http headers.

Het is IN het Engels. Dit omdat het ondertussen mijn eerste taal is geworden.
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
scrap /* Voor het gewoon je de headers send */
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
Zie aanvulling:)
Marien xD
Marien xD
24 jaar geleden
 
0 +1 -0 -1
Wow dit is echt relax. Als ik het goed begrijp blijf je altijd ingelogd totdat de cookie verdwijnt of als je uitlogt
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
Ja, het is denk ik ook redelijk veilig, gezien de random hash en het ip wat gecontroleerd wordt.
Robbert
Robbert
24 jaar geleden
 
0 +1 -0 -1
Ziet er goed uit ;)
keep on going...
B a s
B a s
24 jaar geleden
 
0 +1 -0 -1
misschien kun je toch een voorbeeld geven hoe je het in de praktijk gebruikt :) tis zo een beetje wazig vind ik.. ik zie niet meteen duidelijk wat het is.. ik moet eerst de functie en variabelen bekijken om te kunnen weten wat het doet.. ook moet ik maar bedenken hoe ik aan de vars $name en $pass kom.. voorbeeld zou dus makkelijk zijn ;-)
B a s
B a s
24 jaar geleden
 
0 +1 -0 -1
tnx :)


24 jaar geleden
 
0 +1 -0 -1
misschien gekke vraag!
Wat is random hash??
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
de md5 encryptie van een string = een hash, aangezien deze wordt gemaakt met de tijd die het op het moment van verversen is, wordt deze redelijk willekeurig.
$timehash = md5(time());
$timehash wordt: c7e15bb32d6959fbd72722ae2ed8ca96
Die timehash waarde wordt vervolgens in je cookie en database gestopt en als ze bij je volgende bezoek overeenkomen EN je cookie is nog niet verlopen ben je nog steeds ingelogged.


24 jaar geleden
 
0 +1 -0 -1
Robin,

Bij mij werkt die niet.
Inloggen gaat, hij slaat iets in DB op.
Alleen kom ik steeds weer terug bij punt inloggen.
Dus ik zie geen welkom staan, en uitloggen.
Hoe kan dit komen?


24 jaar geleden
 
0 +1 -0 -1
Moet je hiervoor niet mysql wat tabbellen aanmaken enz? Waar heb je dat gelaten als ik zo vrij mag zijn?

Grz, een andere Robin
B a s
B a s
24 jaar geleden
 
0 +1 -0 -1
Er staat bij de toelichting als je goed leest:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?
/* Required SQL;
CREATE TABLE `users` (
  `id` int(4) NOT NULL auto_increment,
  `name` varchar(20) NOT NULL default '',
  `password` varchar(32) NOT NULL default '',
  `timehash` varchar(32) NOT NULL default '',
  `ip` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
*/

?>


:P
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
Cedric, controleer of je cookie (goed) is aangemaakt. Probeer anders het path leeg te maken. Op localhost had de functie ook wat problemen met path/domain instellingen.
Cedric
Cedric
24 jaar geleden
 
0 +1 -0 -1
Het is gelukt.
Er zat een fout in.

setcookie($website, $timehash, time()+$expire,$path, $domain, "0");

er moet een spatie komen tussen time()+$expire,$path
dus:

setcookie($website, $timehash, time()+$expire, $path, $domain, "0");

En $path moest ik weg laten.
Peter
peter
24 jaar geleden
 
0 +1 -0 -1
zal wel aan mij liggen.. maar ik krijg allemaal vage codes rondom die naam vakjes enz
Rutger Gelling
Rutger Gelling
24 jaar geleden
 
0 +1 -0 -1
je kunt die timehash in de database zelf gewoon leeg laten?
Rutger Gelling
Rutger Gelling
24 jaar geleden
 
0 +1 -0 -1
Fatal error: Call to undefined function: usersession() in /home/derrudi.org/www/test/session.php on line 6

wrom krijg ik dit?
Rutger Gelling
Rutger Gelling
24 jaar geleden
 
0 +1 -0 -1
de foutmeldingen zjin weg, maar als ik probeer te inloggen gebeurt er ook niks.. kom gewoon weer terug bij waar ik was. Krijg verder ook geen foutmeldingen. dus :S

detail.. in de database veranderd niks..
Rutger Gelling
Rutger Gelling
24 jaar geleden
 
0 +1 -0 -1
please? anyone? NIEMAND?!?
Rutger Gelling
Rutger Gelling
24 jaar geleden
 
0 +1 -0 -1
I'm feeling kinda lonely in here :(


24 jaar geleden
 
0 +1 -0 -1
>> Fatal error: Call to undefined function: usersession() in
>> /home/derrudi.org/www/test/session.php on line 6

Voeg \'session_start()\' toe aan het begin van je script. Of doe start sessie\'s automatisch; lees dan http://www.php.net/manual/nl/ref.session.php.
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
Dit script heeft niks met php sessions te maken ondanks de naam. Dit script leeft van cookies, die je 'sessie' in leven houden.

Je moet zelfgemaakte functies eerst defineren voordat je ze gebruikt en daar is het bij je fout gegaan.

mvg,
Robin
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
nieuwe locatie echo "<script>location.href='/'</script>"; in functie kan je zelf veranderen Rutger.
Rutger Gelling
Rutger Gelling
24 jaar geleden
 
0 +1 -0 -1
$update = 'UPDATE users SET timehash="'.$timehash.'" WHERE ip="'.$_SERVER[REMOTE_ADDR].'"';

kan beter veranderd worden in:

$update = 'UPDATE users SET timehash="'.$timehash.'" WHERE ip="'.$_SERVER[REMOTE_ADDR].'" AND name="'.$user['name'].'"';

Kreeg problemen toen m'n broertje inlogde en op zelfde ip zat. :)

greetz (thnx voor de reacties btw :))


24 jaar geleden
 
0 +1 -0 -1
if($action == "logout")
{
$update = 'UPDATE users SET timehash="logout" WHERE ip="'.$_SERVER[REMOTE_ADDR].'"';
mysql_query($update);
}

Heb ik vervangen door:
if($action == "logout")
{
$update = 'UPDATE users SET timehash="logout" WHERE ip="'.$_SERVER['REMOTE_ADDR'].'" AND name="'.$user['name'].'"';
mysql_query($update);
setcookie ($website, "", time() - 3600, $path, $domain, 1);

}

Om het cookie te laten vervallen. Ik krijg nl. de database niet geupdate om 'logout' in de timehash te zetten. Bij het klikken op logout wordt ik 'uitgelogd' maar wanneer ik het beginscript weer inlaad ben ik nog steeds ingelogd! Iemand nog een idee?

grtz

Arjen
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
AND name="'.$user['name'].'"'; is inderdaad incorrect, aangezien je de variabele waarschijnlijk pas later uit de database haalt. Komt de waarde logout wel in de database te staan?

Owja, de waarde logout kan je beter vervangen met leeg:) of een of andere willekeurige hash die het cookie niet meeneemt.


24 jaar geleden
 
0 +1 -0 -1
dus dat bovenstaande script is de config.php en die onderste is de session.php of heb ik het mis ? wat moet er anders staan in config.php


24 jaar geleden
 
0 +1 -0 -1
ik vind het raar want dan include hij zichzelf . . .
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
in de config.php maak je de database connectie
in de session.php plaats je de functie en in de rest van je script gebruik je de functie
alhouwel je in de config.php ook alvast de waarden foor de functie kan defieneren


24 jaar geleden
 
0 +1 -0 -1
De toevoeging van name=etc. kwam van Rutger die (redelijk terecht dacht ik) opmerkte dat het script bij het uitloggen alleen naar het ip-adres keek. Hij heeft het aan de praat als ik alles zo lees. Nu logt ie iedereen uit met hetzelfde ip-adres! Wat vind je zelf van het idee om via de cookie uit te laten loggen? Dan kun je in de database altijd nog zien wanneer iemand voor het laatst ingelogd is geweest zonder extra velden te hoeven updaten. Overigens werkt:
setcookie ($website, "", time() - 3600, $path, $domain, 1); hiervoor ook niet, maar misschien is dat omdat de eerdere instructie al fout loopt?

De waarde logout komt inderdaad niet in de database, dus bij het opnieuw aanroepen van het script (zonder de ?action=logout) ben je weer ingelogd! Dit gebeurt ook wanneer ik het name-gebeuren verwijder.

Aan gY:
het bovenste gedeelte van het verhaal dient in een aparte file gezet te worden.. je eigen pagina waar je mensen laat inloggen (zeg: inlog.php). Daarnaast moet je een bestand aanmaken met de naam session.php (of noem het zoals je wilt) en hier het stukje code wat begint na de opmerking "Code:" invoegen. In je eigen pagina (inlog.php) komt dan de include. De opmerking // footer (onderkant) van je layout is misschien misleidend dat je denkt dat de code in de footer van je bestand dient te komen.

Kleine toevoeging nog: Bij het toevoegen van een gebruiker dient het veld password met de functie md5 bewerkt dient te worden. Dit staat links van het veld waar je de waarde invoert.

Hopelijk is het zo iets duidelijker..
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
Dankje wel, een eenvoudige class komt er hopelijk volgende week aan. Inclusief het aanmaken van de tabel en gebruikers.

Suggesties zijn welkom.


24 jaar geleden
 
0 +1 -0 -1
Hallo,

Ik krijg het script niet helemaal werkend.
Ik heb het script in een map admin geplaatst.
als ik wil inloggen word er door gelinkt naar de root van de website. de tabel word geupdate en er word ook een cookie aangemaakt.


24 jaar geleden
 
0 +1 -0 -1
Het is gelukt.

Hoe kan ik nou in een andere php pagina kijken of ik ben ingelogd?
Zodat ik meerder pagina's kan beveiligen.
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
Ik denk dat je hiervoor beter de Authenticatie class kan gebruiken, die is makkelijker te gebruiken en ook iets veiliger. Ook zal ik die in de toekomst verder ontwikkelen. Mvg Robin.
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
Dat doet de functie ook, gewoon gebruiken als bij de login


24 jaar geleden
 
0 +1 -0 -1
Sorry,

Beetje dom van me dat ik dat niet had gezien het is vrij logisch.
ik vind het echt een supper inlog systeem!
voor wat ik het wil gebruiken werkt het prefect!


24 jaar geleden
 
0 +1 -0 -1
ik heb nu het volgende veranderd:

dit:

if($action == "logout")
{
$update = 'UPDATE users SET timehash="logout" WHERE ip="'.$_SERVER[REMOTE_ADDR].'"';
mysql_query($update);
}

in:

if($action == "logout")
{

$update2 = 'UPDATE login SET timehash="logout" WHERE ip="logout"';
$update = 'UPDATE login SET ip="logout" WHERE timehash="'.$_COOKIE[$website].'"';
mysql_query($update);
mysql_query($update2);
}


Door dit voordeel blijft je ip aders niet opgeslagen zodat je onder een andere naam weer kan inloggen met het zelfde ip.

en dit:

{
$selectsql = 'SELECT * FROM login WHERE timehash="'.$_COOKIE[$website].'" AND ip="'.$_SERVER[REMOTE_ADDR].'"';
$select = mysql_query($selectsql);
$rows = mysql_num_rows($select);
if($rows > 0)
{
$user = mysql_fetch_array($select);
$timehash = md5(time());
$update = 'UPDATE login SET timehash="'.$timehash.'" WHERE ip="'.$_SERVER[REMOTE_ADDR].'"';
mysql_query($update);
setcookie($website, $timehash, time()+$expire, $path, $domain, "0");

return $user;
}

heb ik veranderd in

{
$selectsql = 'SELECT * FROM login WHERE timehash="'.$_COOKIE[$website].'" AND ip="'.$_SERVER[REMOTE_ADDR].'"';
$select = mysql_query($selectsql);
$rows = mysql_num_rows($select);
if($rows > 0)
{
$user = mysql_fetch_array($select);
$timehash = md5(time());
$update = 'UPDATE login SET timehash="'.$timehash.'" WHERE ip="'.$_SERVER[REMOTE_ADDR].'"';
//mysql_query($update);
//setcookie($website, $timehash, time()+$expire, $path, $domain, "0");

return $user;
}

dus eigenlijk staat bijna alles er nu overbodig in.
nu kan je dus op meerdere computers inloggen met het zelfde ip. alleen het nadeel is dat de timehash niet word geupdate. nu is mijn vraag is dit heel erg qua beveiliging? of heeft dit alleen met de inlog tijd te maken?
Robin
robin
24 jaar geleden
 
0 +1 -0 -1
Uiteindelijk is je cookie maar tijdelijk geldig, dus valt wel mee
Rutger Gelling
Rutger Gelling
24 jaar geleden
 
0 +1 -0 -1
Hmm ik d8 dat het zo werkte. Maar bij $action == "logout" is de .$user['name']. niet meer geldig. dus zal hij nergens logout neerzetten.

Nu heb ik het als volgt gedaan en het werkt:

function usersession($website,$domain,$path,$expire)
{
global $action;
global $name;
global $pass;
if($action == "login")
{
$selectsql = 'SELECT * FROM users WHERE name="'.$name.'" AND password="'.md5($pass).'"';
$rows = mysql_num_rows(mysql_query($selectsql));
if($rows == 1)
{
$timehash = md5(time());
$update = 'UPDATE users SET timehash="'.$timehash.'", ip="'.$_SERVER[REMOTE_ADDR].'" WHERE name="'.$name.'"';
mysql_query($update);
setcookie($website, $timehash, time()+$expire, $path, $domain, "0");
}
if($rows == 0)
{
echo "<script>location.href='/'</script>";
}
echo "<script>location.href='/'</script>";
}

if($action == "logout")
{
$update = 'UPDATE users SET timehash="logout" WHERE ip="'.$_SERVER[REMOTE_ADDR].'" AND timehash="'.$_COOKIE[$website].'"';
mysql_query($update);
}

else
{
$selectsql = 'SELECT * FROM users WHERE timehash="'.$_COOKIE[$website].'" AND ip="'.$_SERVER[REMOTE_ADDR].'"';

$select = mysql_query($selectsql);
$rows = mysql_num_rows($select);
if($rows > 0)
{
$user = mysql_fetch_array($select);
$timehash = md5(time());
$update = 'UPDATE users SET timehash="'.$timehash.'" WHERE ip="'.$_SERVER[REMOTE_ADDR].'" AND name="'.$user['name'].'"';
mysql_query($update);
setcookie($website, $timehash, time()+$expire, $path, $domain, "0");
return $user;
}
}

}


24 jaar geleden
 
0 +1 -0 -1
Ik wil dit script voor het eerst gebruiken, maar ik krijg telkens een foutmelding:

Warning: Supplied argument is not a valid MySQL result resource in /home/student/voltijd/walleta/public_html/1GPRJ2/session.php on line 7

De query waar hij dit probleem op krijgt:

SELECT * FROM 1gprj2_users WHERE timehash="" AND ip="<hier mijn ip>"

Het enige dat ik gedaan heb, is de tabelnaam in het SQL script niet users genoemd, maar 1grpj2_users. Uiteraard heb ik in alle SQL queries ook die tabelnaam gewijzigd.

De database is nog leeg, ik wil hem net gaan gebruiken. Wat kan er aan de hand zijn?


24 jaar geleden
 
0 +1 -0 -1
if($rows > 0)

Bij de > (meer dan) denkt ie dat dat een sluit haakje is, hoe verhelp ik dit?


24 jaar geleden
 
0 +1 -0 -1
Ik snap er niks van
Something Else
Something Else
24 jaar geleden
 
0 +1 -0 -1
Ik begrijp het ook nie echt.

Wat ik d8:
login.php?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?

include("conn.php"); //plaats hier db connectie in
include("session.php"); //plaats hier onderstaand PHP script / functie in

$website    ='hozee';
$domain        ='www.hozee.org';
$path        ='';
$expire        ='10000';
$user = usersession($website,$domain,$path,$expire);


//ergens in de body van het index bestand waar je formulier wilt plaatsen

if (!$user['name'])
{

    echo "<form name=\"form1\" method=\"post\" action=\"?action=login\">";

    echo "Name <input type=\"text\" name=\"name\"> ";
    echo "Pass <input type=\"password\" name=\"pass\"><input type='submit' value=\"submit\" alt=\"login\" name=\"login\">";

    echo "</form>";
}

else
{
    echo "Welkom " . $user['name'] . "<a href=\"?action=logout\">uitloggen</a>";
}

?>




---session.php?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
function usersession($website,$domain,$path,$expire)
        {

        global $action;
        global $name;
        global $pass;
        if($action == "login")
                {

                $selectsql = 'SELECT * FROM users WHERE name="'.$name.'" AND password="'.md5($pass).'"';
                $rows = mysql_num_rows(mysql_query($selectsql));
                if($rows == 1)
                    {
                            $timehash = md5(time());
                    $update = 'UPDATE users SET timehash="'.$timehash.'", ip="'.$_SERVER[REMOTE_ADDR].'" WHERE name="'.$name.'"';
                    mysql_query($update);
                    setcookie($website, $timehash, time()+$expire, $path, $domain, "0");

                    }

                if($rows == 0)
                    {

                    }

                echo "<script>location.href='/'</script>";
                }


        if($action == "logout")
            {

            $update = 'UPDATE users SET timehash="logout" WHERE ip="'.$_SERVER[REMOTE_ADDR].'"';
            mysql_query($update);
            }


        else
            {
            $selectsql = 'SELECT * FROM users WHERE timehash="'.$_COOKIE[$website].'" AND ip="'.$_SERVER[REMOTE_ADDR].'"';
            $select = mysql_query($selectsql);
            $rows = mysql_num_rows($select);
            if($rows > 0)
                {

                $user = mysql_fetch_array($select);
                $timehash = md5(time());
                $update = 'UPDATE users SET timehash="'.$timehash.'" WHERE ip="'.$_SERVER[REMOTE_ADDR].'"';
                mysql_query($update);
                setcookie($website, $timehash, time()+$expire, $path, $domain, "0");

                return $user;
                }
            }

        }


?>



----
Ik weet dat ik geen pro, ben maar ik wil dit wel proberen.
iemand? :x


23 jaar geleden
 
0 +1 -0 -1
ik snap het ook niet! ben ook geen pro!
ik wil het een keer testen op mn eigen computer;
ik sla de code op in kladblok en dan opslaan als login.php
als ik login.php aanklik( dubbel) dan komt er niks
ook als ik voor openen kies komt er niks!
Alfred -
Alfred -
23 jaar geleden
 
0 +1 -0 -1
Quote:
$name and $pass should be extracted from the loginform

This function assumes that there is already a connection to the database.


Je moet ook een formulier voorzien, en een database... Af en toe ook eens lezen...
Gert Van Nuffel
Gert Van Nuffel
23 jaar geleden
 
0 +1 -0 -1
softtak je kan een php script niet zomaar uitvoeren op je computer zelf, zet 'em op de server en je zal zien dat het script werkt!
Jelmer -
Jelmer -
23 jaar geleden
 
0 +1 -0 -1
@Gert: Zie de datum, je bent ongeveer 6 maanden aan de late kant :)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Nanno
Nanno
21 jaar geleden
 
0 +1 -0 -1
Beste luitjes,

Beetje jammer dat er geen UPDATE is van dit script.
Ik heb de bovenstaande code gebruikt, maar ik snap echt niet wat ik allemaal moet aanpassen om in te loggen en naar een desbetreffende pagina te gaan.
Eigenlijk wil ik een login die een gehele map beveiligd.
Oftewel: Ik wil alle pagina's in een bepaalde map beveiligen met een login.
Wie heeft zin om me daarbij te helpen?

Groet,

Nanno

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. phpmysql-inlog-functie

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.