[PHP] Inlogscript wil niet goed werken met sessions

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ewt
  • Registratie: Februari 2003
  • Laatst online: 10-08 19:33
Ik ben momenteel een inlogscript aan het maken voor een intranet pagina.
Voor het beheer heb ik een simpel inlogsysteem via sessions en mysql gemaakt.
Maar dit systeem moet groepen hebben om verschil tussen admin en editor te hebben.
Nu heb ik in de database een veld 'groupid' gemaakt waar ik met een nummer aangeef welke groep het is.

Het inlogsysteem werkte zonder groepen, maar ik krijg het niet voor elkaar om de groep te laten controleren. Als gebruiker is ingelogt kan hij overall komen ongeacht groep. Aangezien mijn php kennis nog redelijk prill ben ik bang dat ik wat over het hoofd zie. Ik hoop dat iemand me wat licht op de zaak kan schijnen :?

Hieronder de code:
Inlog.php


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
36
37
38
39
40
41
42
43
44
45
<?php
// starting the session
session_start();


$errorMessage = '';
// specificatie of POST variables
if (isset($_POST['txtlogin']) && isset($_POST['txtPassword'])) {
    include '../conn.php';

    // loginname en password with md5
    $login   = $_POST['txtlogin'];
    $password = (md5($_POST['txtPassword']));

    // check if the user id and password combination exist in database
    $sql = "SELECT login, groupid
            FROM auth_user
            WHERE login = '$login' AND user_password = '$password'";

    $result = mysql_query($sql) or die('Query failed. ' . mysql_error());
     if (mysql_num_rows($result) == 1) {

    // the user id and password match,
        $row = mysql_fetch_object($result);
        // set the session
        $_SESSION['groupid'] = $row->groupid;
        $_SESSION['db_is_logged_in'] = true;
        // hier kijk je waar de user heen gaat
        switch ($_SESSION['groupid'])   {

            case    1:    header('Location: index.php');
                        break;
            case    2:    header('Location: index.php');
                        break;
            default:    header('Location: default.php');
                        break;
        }
        exit();
    }
    else
    {
        $errorMessage = 'Sorry, wrong user id / password';
    }
}
?>



scriptje om te controleren als er ingelogt is:


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
session_start();

// is the one accessing this page logged in or not and is he in the admin group?
if (!isset($_SESSION['db_is_logged_in'])
   || ($_SESSION['db_is_logged_in'] !== true) && ($_SESSION['groupid'] == 1))  {

   } else {

   // not logged in, move to login page
   header('Location: login.php');
   exit;
}
?>

[ Voor 15% gewijzigd door ewt op 05-12-2005 14:32 ]


Acties:
  • 0 Henk 'm!

  • t-x-m
  • Registratie: November 2003
  • Laatst online: 24-08 11:21

t-x-m

.NET Nerd

Is het controle scriptje wel in de pagina geinclude??

En probeer het eens zo:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
session_start();

// is the one accessing this page logged in or not and is he in the admin group?
if ($_SESSION['db_is_logged_in'] != true AND $_SESSION['groupid'] != 1) {
// not logged in, move to login page
header('Location: login.php');
exit();
}
?>


En weet je zeker dat $_SESSION['db_is_logged_in'], $_SESSION['groupid'] wel zijn zoals je ze verwacht?? :)
edit:
zet je script ff tussen de [code=php]<?php print $code; ?>[/code] tags.
edit2: goedzo ;)

[ Voor 54% gewijzigd door t-x-m op 05-12-2005 14:40 ]

GC.Collect();


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Met het hieronder staande stuk code los je ook een IE bug op, namelijk dat je nu dan niet meer een error pagina krijgt wanneer je de terug knop gebruikt.

PHP:
1
2
3
//Start > php sessie
session_start(); 
header("Cache-control: private");           //ie6 terug bug opgelost

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • ewt
  • Registratie: Februari 2003
  • Laatst online: 10-08 19:33
En weet je zeker dat $_SESSION['db_is_logged_in'], $_SESSION['groupid'] wel zijn zoals je ze verwacht?? :)
Daar zit volgens mij wel het probleem met die groep. Het script werkte goed toen ik alleen controleerde als de gebruiker was ingelogt...
Ik snap de werking van "session_start();" niet helemaal.
Word in die sessie de eigenschappen van $_SESSION['db_is_logged_in'] en $_SESSION['groupid'] meegenomen (zonder gebruik van cookie's) of moet er gebruik worden gemaakt van een SID (sessionID)? De uitleg die ik daarover heb kunnen vinden op de diverse websites vond ik alles behalve duidelijk.

Ik bedoel dit stukje script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$sql = "SELECT login, groupid
FROM auth_user
WHERE login = '$login' AND user_password = '$password'";

$result = mysql_query($sql) or die('Query failed. ' . mysql_error());
if (mysql_num_rows($result) == 1) {

// the user id and password match,
$row = mysql_fetch_object($result);
// set the session
$_SESSION['groupid'] = $row->groupid;
$_SESSION['db_is_logged_in'] = true;


/edited voor een beetje extra duidelijkheid.

[ Voor 27% gewijzigd door ewt op 05-12-2005 14:33 ]


Acties:
  • 0 Henk 'm!

  • t-x-m
  • Registratie: November 2003
  • Laatst online: 24-08 11:21

t-x-m

.NET Nerd

Een sessie is een variabele die beschikbaar is voor alle pagina's op een domein, mits deze pagina's de sessie starten(session_start();). zo kunnen meerdere pagina's gegevens van elkaar gebruiken.
De sessie variabelen vervallen na het sluiten van de browser.

je kunt je sessie variabelen heel simpel testen door ze gewoon te printen, maak het controle scriptje dan ff zo om te kijken wat ze nu zijn:
PHP:
1
2
3
4
5
6
7
8
<?php
session_start();
//debugging:
print "sessie db_is_logged_in is: ".$_SESSION['db_is_logged_in']."<br />";
print "en groupid is: ".$_SESSION['groupid'];
exit();
}
?>


Kun je het misschien niet beter hier vragen? :X

[ Voor 26% gewijzigd door t-x-m op 05-12-2005 14:44 ]

GC.Collect();