Toon posts:

[php] Login script probleem

Pagina: 1
Acties:

Onderwerpen


  • Helixon
  • Registratie: Maart 2010
  • Laatst online: 04-06 03:34
Beste, :)

Ik ben bezig met een website voor een school opdracht. ik heb op het moment bezig met een login script dat gebruik maakt van PHP en MySQL.

Mijn probleem is als volgt:

ik geef de gebruikersnaam en wachtwoord op, en dat pikt hij allemaal. maar wanneer ik weer naar de home directory word doorverwezen, dan heb ik niet ingelogd. mijn gevoel hierbij gaat naar het zetten van de sessie...

het is dus de bedoeling om wanneer je inlogt het gebruikers id uit de MySQL tabellen opgeslagen wordt in de sessie. Ik krijg geen error meldingen o.i.d. alleen niet niet gezette sessie...

ik heb het volgende geprobeert:

- vergelijking met ander login scripts ( ben ik niet uitgekomen)
- sessie aangepast (werkte, maar ik kon het user id niet opslaan in de sessie)
- mysql query's aangepast ( niet het gewenste resultaat)
- Vrienden gevraagd ( Wisten het ook niet )


Ik hoop dus met een paar extra ogen ( van jullie ) het probleem op te kunnen lossen.

Hier is het controle gedeelte van het login script:

PHP:
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
            {
                // Check gegevens
                $sql = mysql_query ( "SELECT * FROM users WHERE login = ' ".$_POST['login']." ' AND password = ' ". md5 ($_POST['pass']) ." ' ");
                $row = mysql_fetch_assoc ( $sql );
                if ( $row  === 0 )
                {
                    $error = '<center><b><font color="red">De gebruikersnaam en wachtwoord zijn foutief ingevuld!</font></b></center><br /><br />';
                }
                else
                {
                    $fetch = mysql_fetch_assoc ( $sql );
                    
                    //Check2
                    if ( $fetch['active'] === 0 )
                    {
                        $error = '<center><b><font color="red">Uw account is niet actief!</font></b><br /><br /></center>';
                    
                    }elseif ( $fetch['level'] === 1 )
                    {
                        $error = '<center><b><font color="red"> Uw Account is helaas geblokkeerd!</font></b><br /><br />';
                    
                    }
                    else
                    {
                        mysql_query ( "UPDATE users SET lastlogin = NOW(), lastip = ' ".$_SERVER['REMOTE_ADDR']." ', lasthost = ' ".gethostbyaddr($_SERVER['REMOTE_ADDR'])." ' WHERE id = '".$fetch['id']."' ")
                        or die ("Database error");
        
                        $_SESSION['on'] = $fetch['id'];
            
                        header ( "Location: ".$website );
                        exit;
                    }
                }       
            }
        }


Groetjes en alvast bedankt,

Helixon

Edit:----------------------------------------

Het Probleem is opgelost ;)

In de query had ik de tabelnaam password i.p.v. pass.
En in de in de query ik had spaties tussen de: '<spatie>"variabel"<spatie> ' staan.

Bedankt voor jullie hulp.

Dit topic kan op slot!

[Voor 12% gewijzigd door Helixon op 01-04-2011 11:09]

Omdat het kan.....


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 05-06 19:34

Creepy

Tactical Espionage Splatterer

En je weet zeker dat de sessie wordt gezet? En hoe check je dat op de pagina waarnaar wordt geredirect?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have star problems" --Kevlin Henney


  • Helixon
  • Registratie: Maart 2010
  • Laatst online: 04-06 03:34
Ik laat de gebruikersnaam fetchen door het id uit de sessie te halen...:

PHP:
1
2
3
4
5
6
7
8
9
    $sql = "SELECT * FROM users WHERE id =  ";
    $result = mysql_query ( $sql );
    $userdata = mysql_fetch_assoc($result);

    if( isset($_SESSION['on']) && $_SESSION['on'] == $fetch['id'] )
    {
        echo 'Welkom terug op Zeriso.com '.$userdata['name'].' ';
        echo '<br />Uw laatste login was op: '.$userdata['lastlogin'].' ';
    }


hier een link naar het login script en een test gebruiker:

Link

Gebruikersnaam: test
Password: test

Omdat het kan.....


  • pachacuti
  • Registratie: Januari 2002
  • Laatst online: 29-05 01:50
Dit kan nooit werken want $fetch['id'] gaat waarschijnlijk nooit bestaan
probeer eens iets zoals:

PHP:
1
2
3
4
5
6
7
8
9
        if(isset($_SESSION['on']))
        {
        $userid = $_SESSION['on'];
        $sql = "SELECT * FROM users WHERE id = $userid ";
        $result = mysql_query ( $sql );
        $userdata = mysql_fetch_assoc($result);
            echo 'Welkom terug op Zeriso.com '.$userdata['name'].' ';
            echo '<br />Uw laatste login was op: '.$userdata['lastlogin'].' ';
        }

  • RobIII
  • Registratie: December 2001
  • Laatst online: 14:39

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

pachacuti schreef op donderdag 31 maart 2011 @ 23:52:
Dit kan nooit werken want $fetch['id'] gaat waarschijnlijk nooit bestaan
Dat denk ik ook.
Of nog beter: debuggen! Voor mijn part een var_dump(mysql_fetch_assoc($result)). Dat is ook precies waar Creepy naar hint. Debuggen: Hoe doe ik dat?

[Voor 4% gewijzigd door RobIII op 31-03-2011 23:55]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 05-06 12:31
ben ik de enige die het opvalt dat er geen session_start() is...?

$_SERVER['REQUEST_METHOD'] vind ik trouwens ook maar raar.. vooral als je meerdere buttons kunt hebben (bv search & login submit) .. kun je het beste op if($_POST['SubmitLogin'] doen.. (waarbij submit knop als naam en id dus SubmitLogin heeft..)

[Voor 60% gewijzigd door Icekiller2k6 op 31-03-2011 23:58]

Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be


  • pachacuti
  • Registratie: Januari 2002
  • Laatst online: 29-05 01:50
Icekiller2k6 schreef op donderdag 31 maart 2011 @ 23:57:
ben ik de enige die het opvalt dat er geen session_start() is...?
In php.ini is er een optie session.auto_start die je op 1 kan zetten waardoor dit niet meer nodig is. Default staat deze trouwens wel op 0

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 11:57

Ventieldopje

I'm not your pal, mate!

Sessions gaan zo niet werken inderdaad, session_start(); toevoegen boven elke pagina waar je sessies gebruikt. Daarnaast zal dit even snel in elkaar geflanst zijn om ons een idee te geven wat hij bedoelt en zit wel ok in elkaar.

Alleen dus even session_start() aanroepen bij elke pagina ;)
pachacuti schreef op vrijdag 01 april 2011 @ 00:03:
[...]
In php.ini is er een optie session.auto_start die je op 1 kan zetten waardoor dit niet meer nodig is. Default staat deze trouwens wel op 0
Alleen is dit niet altijd wenselijk ;)

[Voor 36% gewijzigd door Ventieldopje op 01-04-2011 00:07]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


  • Helixon
  • Registratie: Maart 2010
  • Laatst online: 04-06 03:34
session_start() wordt geopend in de config die ik in de index geinclude heb...

Omdat het kan.....


  • Bv202
  • Registratie: Oktober 2006
  • Laatst online: 14-11-2021
Ik zou toch ook eens iets gaan doen aan de veiligheid van je website. Wat ik op 't eerste zicht zie:

- Overal SQL-injecties mogelijk -> Maak op z'n minst gebruik van mysql_real_escape_string()
- Hetzelfde voor XSS-attacks - > Maak op z'n minst gebruik van htmlspecialchars()
- MD5 mag ook wel achterwege gelaten worden.-> Verander naar een SHA2-variant + salt.

En dan nog dingen die problemen kunnen/gaan geven:
- Gebruik van variabelen die mogelijk niet bestaan (trim($_POST['login']))
- Afhankelijkheid van PHP-instellngen (zoals hierboven al vermeld, session.auto_start)
- Geen foutafhandeling (blijkbaar tot je eigen frustratie)

En dan nog wat dingetjes die waarschijnlijk toch niet aangepast gaan worden, maar voor de volledigheid:
- Gebruik van opmaak in HTML -> Maak gebruik van CSS!
- HTML en PHP door elkaar gemengd
- Gebruik van de oude mysql_ library -> gebruik dan beter mysqli_

Misschien dat sommige puntjes wat overdreven zijn voor dit topic, maar ik zou toch zeker iets doen aan de veiligheid; op dit moment moet je echt geen expert zijn om binnen te geraken. :)

[Voor 16% gewijzigd door Bv202 op 03-04-2011 15:35]


  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 05-06 15:31
en nog een twee puntjes om het af te maken:

- $row en $fetch zijn hetzelfde?
- je html is niet well-formed bij de eerste twee meldingen

  • Helixon
  • Registratie: Maart 2010
  • Laatst online: 04-06 03:34
Ik plaats morge wel een completere versie van het script...

Omdat het kan.....


  • RobIII
  • Registratie: December 2001
  • Laatst online: 14:39

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Helixon schreef op vrijdag 01 april 2011 @ 00:58:
Ik plaats morge wel een completere versie van het script...
Alsjeblieft niet. We zijn geen persoonlijke debug-service ;) We zien hier graag enkel en alleen relevante(!) stukjes code om een probleem te illustreren; geen complete lappen zodat wij even haarfijn de fouten gaan zitten aanwijzen. We verwachten op GoT wel wat meer eigen inzet en initiatief ;) Zie daarvoor ook onze Quickstart

[Voor 10% gewijzigd door RobIII op 01-04-2011 01:00]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Anoniem: 156876
  • Registratie: Oktober 2005
  • Niet online
kaesve schreef op vrijdag 01 april 2011 @ 00:57:
- $row en $fetch zijn hetzelfde?
Nee, niet dus. Júist niet, dat is nou net het probleem waar TS tegenaan loopt. ;)
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee