loginscript user_id in header

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Domi oconnor

domi oconnor

06/01/2016 15:22:12
Quote Anchor link
Ik Zit al enige tijd met dit script te rotzooien, maar ik krijg het niet voor elkaar om na het inloggen de juiste (user_id) te krijgen op (show_user.php). Het inloggen lukt wel anders zou je niet door gelinkt worden naar (show_user.php) maar niet met het juiste (user_id) je komt namelijk op een pagina terecht zonder info van die desbetreffende (user). Heeft dit met de session te maken of de link in de header ? Dus mijn vraag is weet iemand toevallig een how to of topic waar dit probleem uitgelegd word? of ziet iemand toevallig gelijk wat ik fout doe ? Alles staat online op http://163.158.253.94/cms en uiteraard het encrypte van de wachtwoorden komt als dit script werkt. Bedankt voor jullie tijd ! (hieronder het login script)

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
51
<?php
require_once 'scripts/connect.php';
require_once 'scripts/app_config.php';

if (!session_is_registered('user_id') || !session_is_registered('username'))
{

    // user is not logged in.
    if (isset($_POST['cmdlogin']))
    {

        // retrieve the username and password sent from login form
        // First we remove all HTML-tags and PHP-tags, then we create a md5-hash
        // This step will make sure the script is not vurnable to sql injections.

        
        $u = strip_tags($_POST['username']);
        $p = strip_tags($_POST['password']);
        //Now let us look for the user in the database.
        $query = sprintf("SELECT user_id, username FROM users WHERE username = '$u' AND password = '$p' LIMIT 1;",
            mysql_real_escape_string($u), mysql_real_escape_string($p));
        $result = mysql_query($query);
        // If the database returns a 0 as result we know the login information is incorrect.
        // If the database returns a 1 as result we know  the login was correct and we proceed.
        // If the database returns a result > 1 there are multple users
        // with the same username and password, so the login will fail.

        if (mysql_num_rows($result) != 1)
        {

            // invalid login information
            echo "Wrong username or password!";
            //show the loginform again.
            include "index.php";
        }
else {
            // Login was successfull
            $row = mysql_fetch_array($result);
            // Save the user ID for use later
            $_SESSION['user_id'] = $row['user_id'];
              // Save the username for use later
            $_SESSION['username'] = $u;
              // Now we show the user
            header("Location:show_user.php");
        }
        
    }
else {
         // User is not logged in and has not pressed the login button
         // so we show him the loginform

        include "signup.php";
    }
 
}
else {
     // The user is already loggedin, so we show the user
    include "show_user.php";
}

?>
 
PHP hulp

PHP hulp

21/09/2021 18:48:34
 
- Ariën -
Beheerder

- Ariën -

06/01/2016 15:26:36
Quote Anchor link
Je gebruikt een hoop oude functies:

session_is_registered()
De MySQL-functies.

Gebruik tegenwoordig netjes isset() in te controleren of een sessie bestaat, en gebruik de MySQLi-functies.
Ook foutafhandeling op je queries is zeker aan te raden.

Ook hoef je geen usernames op te slaan in een sessie. Alleen het ID is al voldoende om je te identificeren.
 
Domi oconnor

domi oconnor

06/01/2016 15:27:41
Quote Anchor link
Dit heb ik ook geprobeerd toen kwam ik op een user_id=0 uit :(

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
51
<?php
require_once 'scripts/connect.php';
require_once 'scripts/app_config.php';

if (!session_is_registered('user_id') || !session_is_registered('username'))
{

    // user is not logged in.
    if (isset($_POST['cmdlogin']))
    {

        // retrieve the username and password sent from login form
        // First we remove all HTML-tags and PHP-tags, then we create a md5-hash
        // This step will make sure the script is not vurnable to sql injections.

        
        $u = strip_tags($_POST['username']);
        $p = strip_tags($_POST['password']);
        //Now let us look for the user in the database.
        $query = sprintf("SELECT user_id, username FROM users WHERE username = '$u' AND password = '$p' LIMIT 1;",
            mysql_real_escape_string($u), mysql_real_escape_string($p));
        $result = mysql_query($query);
        // If the database returns a 0 as result we know the login information is incorrect.
        // If the database returns a 1 as result we know  the login was correct and we proceed.
        // If the database returns a result > 1 there are multple users
        // with the same username and password, so the login will fail.

        if (mysql_num_rows($result) != 1)
        {

            // invalid login information
            echo "Wrong username or password!";
            //show the loginform again.
            include "index.php";
        }
else {
            // Login was successfull
            $row = mysql_fetch_array($result);
            // Save the user ID for use later
            $_SESSION['user_id'] = $row['user_id'];
              // Save the username for use later
            $_SESSION['username'] = $u;
              // Now we show the user
            header("Location: http://163.158.253.94/cms/show_user.php?user_id=" . mysql_insert_id());
        }
        
    }
else {
         // User is not logged in and has not pressed the login button
         // so we show him the loginform

        include "signup.php";
    }
 
}
else {
     // The user is already loggedin, so we show the user
    include "show_user.php";
}

?>
 
- Ariën -
Beheerder

- Ariën -

06/01/2016 15:30:24
Quote Anchor link
Waarom gebruik je mysql_insert_id(). Je insert namelijk niks?

Verder lijkt het mij beter om de boel eerst eens goed te herschrijven.
 
Domi oconnor

domi oconnor

06/01/2016 15:30:54
Quote Anchor link
- Ariën - op 06/01/2016 15:26:36:
Je gebruikt een hoop oude functies:

session_is_registered()
De MySQL-functies.

Gebruik tegenwoordig netjes isset() in te controleren of een sessie bestaat, en gebruik de MySQLi-functies.
Ook foutafhandeling op je queries is zeker aan te raden.

Ook hoef je geen usernames op te slaan in een sessie. Alleen het ID is al voldoende om je te identificeren.


Denk je dat dit de problemen veroorzaakt ?


Toevoeging op 06/01/2016 15:35:43:

- Ariën - op 06/01/2016 15:30:24:
Waarom gebruik je mysql_insert_id(). Je insert namelijk niks?

Verder lijkt het mij beter om de boel eerst eens goed te herschrijven.


Het was voor mij gewoon proberen ik ben een beginner met php, het moest een simpel inlog script worden xD weet jij toevallig een goeie how to voor inlog scripts ?
 
- Ariën -
Beheerder

- Ariën -

06/01/2016 15:35:52
Quote Anchor link
Het zou kunnen. Het is zeker iets wat je spoedig moet doen voordat je script opeens niet wil draaien als je hosting de PHP-versie updated.

Opzich is er weinig mis met de workflow van je inlogscript. Hoewel ik wel encryptie mis en je verouderde functies gebruikt.
Gewijzigd op 06/01/2016 15:37:34 door - Ariën -
 
Domi oconnor

domi oconnor

06/01/2016 15:42:29
Quote Anchor link
Ik heb thuis een qnap web server staan die niet meer wil updaten dat zou daar dan mee te maken hebben... weet jij een goeie how to met de nieuwste php technieken voor een inlog script ?
 
- Ariën -
Beheerder

- Ariën -

06/01/2016 15:47:24
Quote Anchor link
Je kan ook XAMPP downloaden, zodat je op je eigen PC een lokale webserver heb. Dan heb je meteen een recente PHP 5.6 draaien.

Zoals ik al zei is de workflow hetzelfde.
- Je moet de MySQLi-functies toepassen, zoals beschreven staat in dit artikel: http://phptuts.nl/view/26/. Voornamelijk is het eigenlijk het vervangen van de connectie, een 'i' toevoegen en een paar parameters toevoegen die naar de connectie verwijzen.
- De session_is_registered() functie schrappen, en hiervoor een isset() gebruiken om je $_SEESION's mee te controleren.
- En natuurlijk je wachtwoord encrypten met password_hash en password_verify
 
Thomas van den Heuvel

Thomas van den Heuvel

06/01/2016 15:58:09
Quote Anchor link
Indien het doel van show_user.php het tonen van informatie van de ingelogde gebruiker is, hoef je dit user id niet mee te geven via de URL, maar deze kun je gewoon uit de sessie vissen.

Als ik het bovenstaande script bekijk is dit de landingspagina wanneer een gebruiker inlogt? Ik zou deze dan profile.php ofzo noemen, show_user.php klinkt meer als een publieke pagina waar je profielen kunt beijken.
 
Domi oconnor

domi oconnor

06/01/2016 16:23:50
Quote Anchor link
- Ariën - op 06/01/2016 15:47:24:
Je kan ook XAMPP downloaden, zodat je op je eigen PC een lokale webserver heb. Dan heb je meteen een recente PHP 5.6 draaien.

Zoals ik al zei is de workflow hetzelfde.
- Je moet de MySQLi-functies toepassen, zoals beschreven staat in dit artikel: http://phptuts.nl/view/26/. Voornamelijk is het eigenlijk het vervangen van de connectie, een 'i' toevoegen en een paar parameters toevoegen die naar de connectie verwijzen.
- De session_is_registered() functie schrappen, en hiervoor een isset() gebruiken om je $_SEESION's mee te controleren.
- En natuurlijk je wachtwoord encrypten met password_hash en password_verify



Als ik deze MySQLi-functies toepas werkt alles dan wel gewoon nog op een webserver met een oudere php versie ?

Toevoeging op 06/01/2016 16:25:03:

Thomas van den Heuvel op 06/01/2016 15:58:09:
Indien het doel van show_user.php het tonen van informatie van de ingelogde gebruiker is, hoef je dit user id niet mee te geven via de URL, maar deze kun je gewoon uit de sessie vissen.

Als ik het bovenstaande script bekijk is dit de landingspagina wanneer een gebruiker inlogt? Ik zou deze dan profile.php ofzo noemen, show_user.php klinkt meer als een publieke pagina waar je profielen kunt beijken.


ja dat is indd de bedoelding ! ik ga dit ook gelijk veranderen. ben weer een stapje verder :D thanks !
 
- Ariën -
Beheerder

- Ariën -

06/01/2016 16:30:34
Quote Anchor link
MySQLi werkt al vanaf PHP 5.0. Dus op je huidige installatie zou het ook moeten werken. De genoemde password-functies daarentegen pas vanaf PHP 5.5. Maar gelukkig is daar anders een'compat'-library voor.
Gewijzigd op 06/01/2016 16:35:08 door - Ariën -
 
Domi oconnor

domi oconnor

06/01/2016 17:47:12
Quote Anchor link
oke mooizo, ik ben nu gelijk even met de qnap helpdesk bezig en update van de firmware is nu wel gelukt hoop alleen dat alle instellingen behouden zijn. Ik heb gelukkig wel een stuk of 3 back ups van me website en de instellingen dus dat gaat wel goed komen Het opnieuw opstarten daarin tegen kan een klein half uur in beslag nemen. Ik kom hier straks op terug. Gelukkig ben ik nu wel in staat om de nieuwe php versie te installeren !! :D.
 
- Ariën -
Beheerder

- Ariën -

06/01/2016 17:54:55
Quote Anchor link
Gelukkig maar. We horen het wel als het gelukt is.
Welke PHP-versie heb je nu dan?
Gewijzigd op 06/01/2016 18:02:57 door - Ariën -
 
Domi oconnor

domi oconnor

06/01/2016 18:19:11
Quote Anchor link
Ik heb nu php versie 5.5.29 (http://163.158.253.94/cms/info.php) welke versie adviseren jullie ?
Gewijzigd op 06/01/2016 18:19:58 door domi oconnor
 
- Ariën -
Beheerder

- Ariën -

06/01/2016 18:30:57
Quote Anchor link
Dit is een recente versie!

Zet ook bovenbaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
?>


Dan zie je alle fouten.
Gewijzigd op 06/01/2016 18:33:23 door - Ariën -
 
Domi oconnor

domi oconnor

06/01/2016 19:07:31
Quote Anchor link
Ik leer van het boek php mysql the missing manual 2nd edition, en daar wordt helaas niet gewerkt met MySQLi functies.
 
- Ariën -
Beheerder

- Ariën -

06/01/2016 19:15:43
Quote Anchor link
Misschien dat boek maar eens in de open haard gooien? ;-)

Vooral als ze het ook nog hebben over session_is_registered() geeft het mij geen goed gevoel voor de recente en aanstaande PHP-versies.

Op phptuts.nl staan recente tutorials over MySQLi. Kijk daar eens naar.
 
Marthijn Buijs

Marthijn Buijs

06/01/2016 19:16:44
Quote Anchor link
Dat is best erg slecht, want MySQLi bestaat al zo'n 12 jaar..
 
Domi oconnor

domi oconnor

06/01/2016 19:24:22
Quote Anchor link
hij geeft dan indd aan dat de fout in line 8 zit en dat is:

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
51
52
53
54
<?php
require_once 'scripts/connect.php';
require_once 'scripts/app_config.php';

error_reporting(E_ALL);
ini_set('display_errors',1);

if (!session_is_registered('user_id') || !session_is_registered('username'))
{

    // user is not logged in.
    if (isset($_POST['cmdlogin']))
    {

        // retrieve the username and password sent from login form
        // First we remove all HTML-tags and PHP-tags, then we create a md5-hash
        // This step will make sure the script is not vurnable to sql injections.

        
        $u = strip_tags($_POST['username']);
        $p = strip_tags($_POST['password']);
        //Now let us look for the user in the database.
        $query = sprintf("SELECT user_id FROM users WHERE username = '$u' AND password = '$p' LIMIT 1;",
            mysql_real_escape_string($u), mysql_real_escape_string($p));
        $result = mysql_query($query);
        // If the database returns a 0 as result we know the login information is incorrect.
        // If the database returns a 1 as result we know  the login was correct and we proceed.
        // If the database returns a result > 1 there are multple users
        // with the same username and password, so the login will fail.

        if (mysql_num_rows($result) != 1)
        {

            // invalid login information
            echo "Wrong username or password!";
            //show the loginform again.
            include "index.php";
        }
else {
            // Login was successfull
            $row = mysql_fetch_array($result);
            // Save the user ID for use later
            $_SESSION['user_id'] = $row['user_id'];
              // Save the username for use later
            $_SESSION['username'] = $u;
              // Now we show the user
            header("Location:profile.php");
        }
        
    }
else {
         // User is not logged in and has not pressed the login button
         // so we show him the loginform

        include "index.php";
    }
 
}
else {
     // The user is already loggedin, so we show the user
    include "profile.php";
}

?>


Toevoeging op 06/01/2016 19:26:39:

PHP Maarten op 06/01/2016 19:16:44:
Dat is best erg slecht, want MySQLi bestaat al zo'n 12 jaar..


hahaha dan ben ik wel blij dat ik de gratis pdf versie heb gedownload in plaats van 40 euro uitgeven voor iets dat een klein beetje out dated is...
 
- Ariën -
Beheerder

- Ariën -

06/01/2016 19:29:54
Quote Anchor link
De functie session_is_registered() bestaat niet meer. Gebruik isset om $_SESSION['user_id'] en $_SESSION['username'] te controleren.
 
Ben van Velzen

Ben van Velzen

06/01/2016 19:31:18
Quote Anchor link
Wat ik erg vind is dat het een boek uit 2013 is, en zo achterhaald is. Zo wordt het gebruik van $_REQUEST zelfs aangeraden zo te zien, en worden joins op de verkeerde manier uitgelegd. Fijn boek, gewoon weg ermee. Verbazingwekkend dat dit een O'Reilly boek is.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

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.