Solved

basic Auth class loginfunction

Posted on 2004-09-28
61
272 Views
Last Modified: 2008-02-01
Alright...this almost must be a simple question.

I used the original Auth example from the PEAR class manual

<?
require_once "Auth/Auth.php";

function loginFunction()
{

    echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "?login=1\">";
    echo "<input type=\"text\" name=\"username\">";
    echo "<input type=\"password\" name=\"password\">";
    echo "<input type=\"submit\">";
    echo "</form>";
}

if ($_GET['login'] == 1) {
    $optional = true;
} else {
    $optional = false;
}

$dsn = "mysql://user:password@localhost/database";

$a = new Auth("DB", $dsn, "loginFunction", $optional);

$a->start();

echo "Everybody can see this text!<br />";

if (!isset($_GET['login'])) {
    echo "<a href=\"test.php?login=1\">Click here to log in</a>\n";
}

if ($a->getAuth()) {
    echo "One can only see this if he is logged in!";
}
?>

but I get an error: Fatal error: Undefined class name 'db' in /opt/guide/www.tijdelijk.nl/HTML/Auth/Container/DB.php on line 130

could someone tell me why this is or give me an example of an Auth class.
I want to make a loginfunction which checks on IP, sends cookies and makes a sessioncheck.
If someone can provide me with enough information to make something like that, he or she will receive 500 points !!!
0
Comment
Question by:cleany
  • 35
  • 26
61 Comments
 

Author Comment

by:cleany
ID: 12167937
I`ve got a database with a table:

people with fields "personid", "personname", "email", "password" and "persontype"
0
 
LVL 5

Accepted Solution

by:
php-webdesign earned 500 total points
ID: 12167969
hey i once created a login script with MD5, cookies and sessions....

code is as follwoing:

is the post i saw you have .nl so i will post it in dutch... if that is allowed.. otherwise i will translate it

index.php

<?php
//als je al ingelogt bent en je roept de pagina aan word je dorgestuurd:
include("geheimwoord.inc");
$hash = md5($_SESSION["inlognaam"].$secretword);
if($hash == $HTTP_COOKIE_VARS["userhash"]) {
      header("Location: index2.php");

//anders geeft hij de inlog pagina weer
} else {
      echo("
        <link href=\"../css.css\" rel=\"stylesheet\" type=\"text/css\">
<form name=\"form1\" method=\"post\" action=\"login.php\">
  <table class=\"tekst\" width=\"100%\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
    <tr>
      <td width=\"95\">Inlognaam:</td>
      <td><input name=\"inlognaam\" type=\"text\" id=\"inlognaam\"></td>
    </tr>
    <tr>
      <td width=\"95\">Wachtwoord:</td>
      <td><input name=\"wachtwoord\" type=\"password\" id=\"wachtwoord\"></td>
    </tr>
    <tr>
      <td><div align=\"right\">
        <input type=\"submit\" name=\"Submit\" value=\"Submit\">
      </div></td>
      <td><input type=\"reset\" name=\"Submit2\" value=\"Reset\"></td>
    </tr>
  </table>
</form>
        ");
      exit();
}
?>

index2.php

<?php include("inc_logged_in.php");?>
//de rest van het document

login.php

<?php
error_reporting(E_ALL);
//start de sessie
session_start();

//als de pagina goed is aangeroepen gaan we verder
if(!empty($_POST)){

//include de databse connectie
    include("inc_connect.php");

//encrypt het net verstuurde wachtwoord met md5
    $wachtwoord = md5($_POST["wachtwoord"]);

//zet de query in een variabele
    $query = "SELECT * FROM beheer
        WHERE inlognaam = '" . $_POST["inlognaam"] ."'
        AND wachtwoord = '$wachtwoord'";

//voer de query uit, en zet het resultaat in een variabele
    $result = mysql_query($query) or die("FOUT : " . mysql_error());

//als de username en wachtwoord bestaan gaat hij verder
    if(mysql_num_rows($result) > 0){
        include("geheimwoord.inc");
        $hash = md5($inlognaam.$secretword);

//zet gebrukersnaam in een sessie
        session_register("inlognaam");

//zet de md5 hash waarde in een cookie
        Setcookie("userhash", $hash, Time()+3600);

//stuur hem door naar de beveilifde pagina
        header("Location: index2.php");

//als de login gegevens niet kloppen geef je een fout
    }else{
        exit("Foute login gegevens");
    }

//als de pagina niet vanuit de index pagina is aangeroepen ga je erheen
}else{
    header("Location: index.php");
}
?>

inc_logged_in.php

<?php
//start de sessie
session_start();

include("geheimwoord.inc");

//vul de hash waarde met de sessie waarde en het geheime woord voor vergelijking
$hash = md5($_SESSION["inlognaam"].$secretword);

//als ze gelijk zijn ben je ingelogd
if($hash == $HTTP_COOKIE_VARS["userhash"]) {
      echo("<span class=\"menu\">U bent ingelogd.</span>");

//zo niet geef een fout
} else {
      echo("<SCRIPT LANGUAGE=\"JavaScript\">
        redirTime = \"5000\";
        redirURL = \"index.php\";
        function redirTimer() { self.setTimeout(\"self.location.href = redirURL;\",redirTime); }
        </script>
        </HEAD>
        <BODY onLoad=\"redirTimer()\">
          <table width=\"100%\"  border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
        <tr>
      <td class=\"tekst\">
      Sorry, de inlog cookies zijn niet meer geldig of vals, log opniew in!<br>
      u word binnen 5 seconden naar de inlog pagina gestuurd
      </td></tr></table>");
      exit();
}
?>

inc_connect.php

<?php
$username = "username";
$password = "wachtwoord";
$host = "localhost";
$dbnaam = "gebruikers";
$db = mysql_connect($host, $username, $password) or die (mysql_error());
mysql_select_db($dbnaam, $db) or die (mysql_error());
?>

geheimwoord.inc

<?php
$secretword = "geheimwoord";
?>

register.php

<?php
include("inc_connect.php");
if(!empty($_POST)){
    //Eerst controlleren of inlognaam al bestaat in de database
    $inlognaam = $_POST["inlognaam"];
    $wachtwoord = $_POST["wachtwoord"];
    $query = "SELECT * FROM beheer
             WHERE inlognaam = '$inlognaam';";
    $result = mysql_query($query) or die ("FOUT : " . mysql_error());
    if(mysql_num_rows($result) > 0){
        //inlognaam bestaat al. foutmelding
        die("Inlognaam bestaat al");
    }else{
        //wachtwoord omzetten naar md5
        $wachtwoord = md5($wachtwoord);
        //OK, query opbouwen
        $query="INSERT INTO beheer (inlognaam, wachtwoord) ";
        $query .= "VALUES ('$inlognaam', '$wachtwoord');";
        $result = mysql_query($query) or die("FOUT: " . mysql_error());
        die("aanmelden gelukt");
    }
}
?>

<form name="form1" method="post" action="<?php echo($_SERVER["PHP_SELF"]);?>">
Inlognaam: <input name="inlognaam" type="text" size="30" maxlength="40"><br>
Wachtwoord: <input name="wachtwoord" type="password" size="30" maxlength="8"><br>
<input type="submit" name="submit" value="registreren">
<input name="reset" type="reset" value="leegmaken">
</form>

hope this is what you are looking for... think you will have to edit it to your choice...
0
 

Author Comment

by:cleany
ID: 12168053
I hope so...dank je...

eigenlijk moest ik ook iets met PEAR classes doen....
dat weet je zeker niet ?


if it works the 500 points are for you, but I really need to have PEAR classes working along with this...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168095
well i am sure this script works... but it isn't build with the PEAR classes sorry

never really worked with the pear class... but you can anyway use the script
0
 

Author Comment

by:cleany
ID: 12168288
hmm...echt vreemd...

"Foute login gegevens"

krijg ik als melding...net als bij die andere...
0
 

Author Comment

by:cleany
ID: 12168330
alright...what does it say if you go to http://www.addrenaline.com/~ip-03/login

and inlognaam->test and wachtwoor->test
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168331
indeed strange... try putting error_reporting(E_ALL); on
0
 

Author Comment

by:cleany
ID: 12168391
Parse error: parse error in /home/ip-03/public_html/login/login.php on line 4

huh ?

this is line 4: session_start();
0
 

Author Comment

by:cleany
ID: 12168399
database:

CREATE TABLE `people` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(6) NOT NULL default '',
  `password` varchar(10) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168430
really strange.....

don't know what that could be
0
 

Author Comment

by:cleany
ID: 12168537
ja het is niet echt de eerste keer dat zoiets me overkomt...echt gestoord word je er van...

hoe ziet je tabel eruit dan ?
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168574
CREATE TABLE `beheer` (
`inlognaam` varchar(50) NOT NULL default 'gebruiker',
`wachtwoord` varchar(50) NOT NULL default 'wachtwoord',
UNIQUE KEY `inlognaam` (`inlognaam`)
) TYPE=MyISAM;
0
 

Author Comment

by:cleany
ID: 12168650
geen id ?
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168658
oooow sorry

CREATE TABLE `people` (
`id` int(11) NOT NULL auto_increment,
`inlognaam` varchar(50) NOT NULL default 'gebruiker',
`wachtwoord` varchar(50) NOT NULL default 'wachtwoord',
UNIQUE KEY `inlognaam` (`inlognaam`)
) TYPE=MyISAM;
0
 

Author Comment

by:cleany
ID: 12168840
probably i`m doing something wrong, but I don`t know what...

this loginscript works:

<br><form method="post" action="login.php">
<table width="50%" border="5" bgcolor="#F0F7B7" bordercolor="#BBF0D4" cellpadding="0" cellspacing="0">
<tr>
<td>voer hieronder je naam en wachtwoord in:</td>
</tr>
<tr>
<td>Naam
<input type="hidden" name="Submit" value="1"></td>
<td> <input type="text" name="naam"> </td>
</tr>
<tr>
<td>Wachtwoord</td>
<td> <input type="password" name="passwd"> </td>
</tr>
<tr>
<td>&nbsp;</td>
<td> <input name="submit" type="submit" value="Login">
</td>
</tr>
<p>
<?php

If ($Submit) {
$db = mysql_connect ($dbhost, $dbname, $dbpasswd) or die ("Verbinding mislukt");
mysql_select_db($dbname, $db);
$naam = addslashes($naam);
$passwd = addslashes($passwd);
$query = "SELECT user_id, naam, passwd FROM users WHERE naam = '$naam' AND passwd = '$passwd' ORDER BY user_id ASC";
$Recordset1      = mysql_query($query);
$id = mysql_fetch_assoc($Recordset1);
$Results = mysql_num_rows($Recordset1);

if ($Results == '1') {
$Login = "1";
$Idcode = $id['user_id'];
$Nickname = $id['naam'];

session_register("Login");
session_register("Idcode");
session_register("naam");

echo "<p><tr><td>welkom <b>";
echo $Nickname;
echo "</b></td></tr><tr><td>Je bent ingelogd. Klik <a href=\"index.php\" target=\"_blank\">hier</a> om verder te gaan.</td></tr>";
echo "<tr><td>Om je wachtwoord te wijzigen ga naar <a href=\"passwd.php\">wachtwoord</a></td></tr>";
echo "</p>";
}
else {
echo "<p><BR>Je gebruikersnaam of password klopt niet.</p>";
}
}
?>
</p>
</form>

but the one above doesn`t....strange...
0
 

Author Comment

by:cleany
ID: 12168844
I mean the other way around...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12168869
can't follow you :s
0
 

Author Comment

by:cleany
ID: 12168989
alright...this above is also a loginscript (not save though), but this works, so I don`t understand why this one works and the other one doesn`t...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169000
is your save_session_path etc set in your php.ini?

0
 

Author Comment

by:cleany
ID: 12169079
session.save_path = /tmp

maar dit is een remote adres, of maakt dat niet uit ?
0
 

Author Comment

by:cleany
ID: 12169090
there`s no remote php.ini in the sites dir`s

but the script above also uses session_start();
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169108
session variables are stored on the SERVER!!

so you need to apply that path to an existing path. an CHMOD it 777
0
 

Author Comment

by:cleany
ID: 12169137
Now it says...

Warning: Cannot modify header information - headers already sent by (output started at /home/ip-03/public_html/login/includes/connect.php:15) in /home/ip-03/public_html/login/login.php on line 32

Warning: Cannot modify header information - headers already sent by (output started at /home/ip-03/public_html/login/includes/connect.php:15) in /home/ip-03/public_html/login/login.php on line 35

it gets weirder all the time....
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169158
session_start(); needs to be at the very top of the page!
0
 

Author Comment

by:cleany
ID: 12169248
it is...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169277
session_register("Login");
session_register("Idcode");
session_register("naam");

replace with

$_SESSION['login'] = $Login;

etc
0
 

Author Comment

by:cleany
ID: 12169310
alright but I`m using yours right now, because I thought that maybe the chmod was the problem...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169352
that is really really really strange :s

works fine for me
0
 

Author Comment

by:cleany
ID: 12169745
ok...what is this !?

Notice: Undefined index: wachtwoord in /opt/guide/www.tijdelijk.nl/HTML/test/login.php on line 13

Notice: Undefined index: inlognaam in /opt/guide/www.tijdelijk.nl/HTML/test/login.php on line 17
Foute login gegevens
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169766
that is a notice... if you now put error_reporting(E_ALL); off by commenting the line... i think it will work
0
6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

 

Author Comment

by:cleany
ID: 12169860
nee...het is hopeloos...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169882
sorry, dan weet ik het ook niet meer
0
 

Author Comment

by:cleany
ID: 12169903
hij zegt gewoon dat de combinatie gebruiker/password niet klopt terwijl dat wel zo is...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169930
heb je het wachtwoord er wel als MD5 in de database staan?!
0
 

Author Comment

by:cleany
ID: 12169973
hij staat er gehashed...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169979
dan snap ik het niet :(
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12169985
je kan kijken als je de waarde uit de database echoed....

en zelf met je eigen oog deze waarde vergelijken...
0
 

Author Comment

by:cleany
ID: 12187869
ik krijg deze meldingen....

Notice: Undefined variable: inlognaam in /opt/guide/www.tijdelijk.nl/HTML/login.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at /opt/guide/www.tijdelijk.nl/HTML/inc_connect.php:11) in /opt/guide/www.tijdelijk.nl/HTML/login.php on line 31

Warning: Cannot modify header information - headers already sent by (output started at /opt/guide/www.tijdelijk.nl/HTML/inc_connect.php:11) in /opt/guide/www.tijdelijk.nl/HTML/login.php on line 34

kan je deze pagina zien?:
http://212.204.230.90/login.php

login.php=
<?php
error_reporting(E_ALL);
//start de sessie
session_start();

//als de pagina goed is aangeroepen gaan we verder
if(!empty($_POST)){

//include de databse connectie
    include("inc_connect.php");

//encrypt het net verstuurde wachtwoord met md5
    $wachtwoord = md5($_POST["wachtwoord"]);

//zet de query in een variabele
    $query = "SELECT * FROM beheer
        WHERE inlognaam = '" . $_POST["inlognaam"] ."'
        AND wachtwoord = '$wachtwoord'";
//voer de query uit, en zet het resultaat in een variabele
    $result = mysql_query($query) or die("FOUT : " . mysql_error());

//als de username en wachtwoord bestaan gaat hij verder
    if(mysql_num_rows($result) > 0){
        include("geheimwoord.inc");
        $hash = md5($inlognaam.$secretword);

//zet gebrukersnaam in een sessie
        session_register("inlognaam");

//zet de md5 hash waarde in een cookie
        Setcookie("userhash", $hash, Time()+3600);

//stuur hem door naar de beveilifde pagina
        header("Location: index2.php");

//als de login gegevens niet kloppen geef je een fout
    }else{
        exit("Foute login gegevens");
    }

//als de pagina niet vanuit de index pagina is aangeroepen ga je erheen
}else{
    header("Location: index.php");
}
?>

inc_connect.php=

<?php
$username = "mailm2";
$password = "(maak ik maar niet openbaar)";
$host = "localhost";
$dbnaam = "mailm2";
$db = mysql_connect($host, $username, $password) or die (mysql_error());
mysql_select_db($dbnaam, $db) or die (mysql_error());
?>
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12187908
oke... now try removing the error_reporting(E_ALL); from login.php
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12187919
and change         session_register("inlognaam");

into

$_SESSION['inlognaam'] = $inlognaam;

under:

//voer de query uit, en zet het resultaat in een variabele

add:

$inlognaam = $_POST['inlognaam'];
0
 

Author Comment

by:cleany
ID: 12187990
the first message is gone....the other ones are still there...strange...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188005
change

//als de login gegevens niet kloppen geef je een fout
    }else{
        exit("Foute login gegevens");
    }

in:

//als de login gegevens niet kloppen geef je een fout
    }else{
echo $wachtwoord;
echo $loginnaam;
        exit("Foute login gegevens");
    }

and manually compare them with the database values
0
 

Author Comment

by:cleany
ID: 12188168
nothing happens...
0
 

Author Comment

by:cleany
ID: 12188269
even het aantal punten verhogen...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188339
try to make the password field in the database bigger (max chars to 100)
0
 

Author Comment

by:cleany
ID: 12188354
I get the same errormessage...

isn`t it something with the "exit" or something ?
0
 

Author Comment

by:cleany
ID: 12188384
it`s something with the "header". It`s called  2 or 3 times or something...
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188428
yeah... beacause data is send before the header.. the header can't be executed

show me de complete code of the login.php that you have now
0
 

Author Comment

by:cleany
ID: 12188538
<?php
//start de sessie
session_start();

//als de pagina goed is aangeroepen gaan we verder
if(!empty($_POST)){

//include de databse connectie
    include("inc_connect.php");

//encrypt het net verstuurde wachtwoord met md5
    $wachtwoord = md5($_POST["wachtwoord"]);

//zet de query in een variabele
    $query = "SELECT * FROM beheer
        WHERE inlognaam = '" . $_POST["inlognaam"] ."'
        AND wachtwoord = '$wachtwoord'";
//voer de query uit, en zet het resultaat in een variabele
    $result = mysql_query($query) or die("FOUT : " . mysql_error());

            $inlognaam = $_POST['inlognaam'];
//als de username en wachtwoord bestaan gaat hij verder
    if(mysql_num_rows($result) > 0){
        include("geheimwoord.inc");
        $hash = md5($inlognaam.$secretword);

//zet gebrukersnaam in een sessie
$_SESSION['inlognaam'] = $inlognaam;

//zet de md5 hash waarde in een cookie
        Setcookie("userhash", $hash, Time()+3600);

//stuur hem door naar de beveilifde pagina
        header("Location: index2.php");

//als de login gegevens niet kloppen geef je een fout
    }else{
            echo $wachtwoord;
            echo $loginnaam;
        exit("Foute login gegevens");
    }
//als de pagina niet vanuit de index pagina is aangeroepen ga je erheen
}else{
    header("Location: index.php");
}
?>
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188554
hij zou nu goed moeten werken... maak je username en wachtwoord nog een keer aan... (oude verwijderen, nieuwe toeveogen)
0
 

Author Comment

by:cleany
ID: 12188577
heb ik gedaan....

maar toch is die fout er nog :S
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12188585
dan snap ik er niets meer van...

je kan dit proberen:

maak ene nieuw php bestand (test.php)

<?
echo md5('jewachtwoord');
?>

vergelijk deze md5 hash met de hash in je database. als die niet gelijk is weet je dat het niet aan je login.php ligt
0
 

Author Comment

by:cleany
ID: 12188705
test.php
a9a3b41f618372309ac46ddb71ca067a

en

database:
098f6bcd4621d373cade4e832627b4f6

dit komt in weze overeen, maar is niet het zelfde
0
 

Author Comment

by:cleany
ID: 12189206
if(mysql_num_rows($result) > 0)

dit moet zijn

if(mysql_num_rows($result) > 1)
0
 

Author Comment

by:cleany
ID: 12189242
hij zegt alleen nog...

Foute login gegevens
0
 

Author Comment

by:cleany
ID: 12189588
even 50 erbij
0
 

Author Comment

by:cleany
ID: 12198607
oke...ik ben er uit...

het had iets met witregels te maken in de inc_connect.php

ik wist niet dat dat als HTML output gezien wordt....

de 500 points are yours !
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12198614
thnx mate :) hoop dat je er veel aan hebt... en als er nog eens iets is laat het maar weten
0
 

Author Comment

by:cleany
ID: 12206841
had je ook een pagina waar je het wachtwoord kan aanpassen of niet ?
0
 
LVL 5

Expert Comment

by:php-webdesign
ID: 12208776
aanpassen niet, wel toevoegen.

Maar als je wil kanik die funtie wel schrijven
0
 

Author Comment

by:cleany
ID: 12209378
is dat veel werk ? want je moet wel rekening met de hashing houden he...
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Introduction Many web sites contain image galleries; a common design for these galleries includes a page with a collection of thumbnail images.  You can click on each of the thumbnail images to see the larger version of the image.  This is easily i…
Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to dynamically set the form action using jQuery.

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now