[PHP] Sessie werkt niet

Pagina: 1
Acties:
  • 169 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
Met het onderstaande scriptje bepaal ik of iemand ingelogt heeft zodat hij namen4.php mag lezen. Als hij dat niet mag, dus als de sessie toegang 'nee' is, dan wordt er een inlogpagina weergegeven, namelijk namen3.php. Als die iemand daar inlogt en de juiste gegevens invoert dan wordt de sessie toegang op 'ja' gezet. Dan zet laat ik die iemand met header("Location: namen2.php"); teruggaan naar namen2.php. Hij krijgt dan echter gewoon weer namen3.php te zien, dus de sessie is weer op 'nee' gezet. Ben nu al een hele tijd aan het prutsen maar kan de fout niet vinden, of gebruik ik de functie sessie verkeerd? (dit is namelijk de eerste keer dat ik deze functie gebruik)


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
if (isset($_SESSION['toegang'])) 
{
   $_SESSION['toegang'] = 'nee';
}
   
if($_SESSION['toegang'] == 'ja')
{
    include('namen4.php');
}
else
{
    include('namen3.php');
}
?>

[ Voor 9% gewijzigd door KappuhH op 28-03-2006 21:50 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
PHP:
1
2
3
4
if (isset($_SESSION['toegang'])) 
{
   $_SESSION['toegang'] = 'nee';
}

Bovenstaande code zet $_SESSION['toegang'] op 'nee' zodra $_SESSION['toegang'] een bepaalde waarde heeft. Op die manier kan de tweede if nooit waar zijn.
Wat denk je dat bovenstaande code doet?

[ Voor 23% gewijzigd door GlowMouse op 28-03-2006 21:52 ]


Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
GlowMouse schreef op dinsdag 28 maart 2006 @ 21:51:
PHP:
1
2
3
4
if (isset($_SESSION['toegang'])) 
{
   $_SESSION['toegang'] = 'nee';
}

Bovenstaande code zet $_SESSION['toegang'] op 'nee' zodra $_SESSION['toegang'] een bepaalde waarde heeft. Op die manier kan de tweede if nooit waar zijn.
Wat denk je dat bovenstaande code doet?
Daar had ik dus eerst het volgende staan:

PHP:
1
2
3
4
if (!isset($_SESSION['toegang'])) 
{
   $_SESSION['toegang'] = 'nee';
}


Maar ik dacht juist dat dat fout was, maar ik had ff een kronkeltje met de betekenis van isset(). Maar ook met !isset doettie het niet.

Acties:
  • 0 Henk 'm!

  • Arjan90
  • Registratie: September 2005
  • Laatst online: 23:46
Als er is gecheckt of de inlog klopt, en de inlog zou kloppen, dan moet je instellen:

PHP:
1
$_SESSION['toegang']=true


PHP:
1
2
3
4
5
if (isset($_SESSION['toegang']) then {
   echo("U heeft nu toegang");
} else {
   echo("U heeft geen toegang");
}


Zo zou het al gewoon moeten werken ;)

[ Voor 14% gewijzigd door Arjan90 op 28-03-2006 22:05 ]

"Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid."


Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
Ik heb nu:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
session_start();
   
if(isset($_SESSION['toegang']))
{
    include('namen4.php');
}
else
{
    include('namen3.php');
}
?>


En nog werktie niet. Ik weet ook 100% zeker dat hij een true meegeeft voor toegang :?

Acties:
  • 0 Henk 'm!

  • EdwinV
  • Registratie: Januari 2004
  • Laatst online: 27-08 09:44
KappuhH schreef op dinsdag 28 maart 2006 @ 22:24:
Ik heb nu:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
session_start();
   
if(isset($_SESSION['toegang']))
{
    include('namen4.php');
}
else
{
    include('namen3.php');
}
?>


En nog werktie niet. Ik weet ook 100% zeker dat hij een true meegeeft voor toegang :?
In dit script zet je nergens de sessie variabele. Vergeet je niet dat je dat wel moet doen?

PHP:
1
2
3
if(!isset($_SESSION['toegang'])){
   $_SESSION['toegang'] = true;
}

Acties:
  • 0 Henk 'm!

  • Arjan90
  • Registratie: September 2005
  • Laatst online: 23:46
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
session_start();

echo("".$_SESSION['toegang']."");

if (isset($_SESSION['toegang'])) 
{
   $_SESSION['toegang'] = 'nee';
}
   
if($_SESSION['toegang'] == 'ja')
{
    include('namen4.php');
}
else
{
    include('namen3.php');
}
?>

"Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid."


Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
Flydesign.nl schreef op dinsdag 28 maart 2006 @ 22:26:
[...]


In dit script zet je nergens de sessie variabele. Vergeet je niet dat je dat wel moet doen?

PHP:
1
2
3
if(!isset($_SESSION['toegang'])){
   $_SESSION['toegang'] = true;
}
Zoals jij het schrijft zet hij toegang op true als de sessie toegang nog niet bestaat, dat betekend dat de bezoeker altijd toegang heeft. Bedoel je niet false ipv true?

Acties:
  • 0 Henk 'm!

  • EdwinV
  • Registratie: Januari 2004
  • Laatst online: 27-08 09:44
KappuhH schreef op dinsdag 28 maart 2006 @ 22:29:
[...]

Zoals jij het schrijft zet hij toegang op true als de sessie toegang nog niet bestaat, dat betekend dat de bezoeker altijd toegang heeft. Bedoel je niet false ipv true?
Mijn voorbeeld was puur om aan te geven op welke manier je die sessie variabele voor de eerste keer kunt declareren. Of de waarde true, false, 'ja' of 'nee' moet zijn zal de topic starter zelf het beste weten.

False zou in dit geval inderdaad de beste optie zijn.

Acties:
  • 0 Henk 'm!

  • Thunk
  • Registratie: Maart 2002
  • Laatst online: 11-08 18:52
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
session_start();
if(isset($_SESSION['toegang']))
{
 switch($_SESSION['toegang'])
 {
  case "ja":
    include('namen4.php');
    break;
  case "nee":
    include('namen3.php');
    break;
  default:
    include('namen3.php');
 }
}
else
{
 include('namen3.php');
}
?>
:?

Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
Sp!tF!re schreef op dinsdag 28 maart 2006 @ 22:27:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
session_start();

echo("".$_SESSION['toegang']."");

if (isset($_SESSION['toegang'])) 
{
   $_SESSION['toegang'] = 'nee';
}
   
if($_SESSION['toegang'] == 'ja')
{
    include('namen4.php');
}
else
{
    include('namen3.php');
}
?>
Zo heb ik het nu gedaan. Hij geeft steeds 'nee', dus de sessie toegang staat ook op 'nee'. Dan moet er dus iets fout zitten in mijn verwerking, maar ik kan er niet achter komen wat er fout is. Het betreffende stukje code ziet er zo uit:

PHP:
1
2
3
4
5
6
7
8
9
10
if($voornaam1 == $voornaam)
    {
        $_SESSION['toegang'] = 'ja';
    }
else
    {
        $_SESSION['toegang'] = 'nee';
    }
mysql_close();
header("Location: namen2.php");


Als de inlognaam gelijk is als de bijbehorende naam uit de database dan is $voornaam1 gelijk aan $voornaam. Hij gaat dus altijd terug naar namen2.php. Als ik nu echter het volgende doe:

PHP:
1
2
3
4
5
6
7
8
9
10
11
if($voornaam1 == $voornaam)
    {
        $_SESSION['toegang'] = 'ja';
        header("Location: namen4.php");
    }
else
    {
        $_SESSION['toegang'] = 'nee';
        header("Location: namen2.php");
    }
mysql_close();


Dan gaat hij wel naar namen4.php. Dus zet ik de toegang dan niet goed op 'ja' of verliest hij die 'ja' als ik hem met een header terugstuur naar namen2.php? Hetuit de database halen en controleren van de goede gebruikersnaam en wachtwoord gaat in ieder geval niet verkeerd.

Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
*Kick*

Het werkt nog steeds niet...

Acties:
  • 0 Henk 'm!

  • newpegasus
  • Registratie: Juni 2003
  • Laatst online: 13-03-2022

newpegasus

Hertog

Wat ik sowieso zou veranderen: nadat jij je sessie start wil je een gebruiker redirecten door een nieuwe header te sturen. Dat gaat problemen opleveren: 'header already sent' gaat ie waarschijnlijk geven. (op te lossen door een meta tag.) Weer wat geleerd...

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

echo("".$_SESSION['toegang']."");

if (isset($_SESSION['toegang'])) 
{
   $_SESSION['toegang'] = 'nee';
}
   
if($_SESSION['toegang'] == 'ja')
{
    include('namen4.php');
}
else
{
    include('namen3.php');
}
?>


Logisch dat ie altijd naar nee gaat: $_SESSION['toegang'] word immers nooit op ja gezet.

[ Voor 61% gewijzigd door newpegasus op 30-03-2006 17:28 ]

GuitarFacts | Last.fm | Google Zoekmachine Optimalisatie


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Juist, als $_SESSION['toegang'] bestaat wordt ie gewoon op nee gezet.

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

echo("".$_SESSION['toegang']."");

if (isset($_SESSION['toegang'])) 
{
   switch ($_SESSION['toegang'])
   {
        case 'ja' :
            include('namen4.php');
            break;
        default :
            include('namen3.php');
            break;
   }
}
?>
Wat ik sowieso zou veranderen: nadat jij je sessie start wil je een gebruiker redirecten door een nieuwe header te sturen. Dat gaat problemen opleveren: 'header already sent' gaat ie waarschijnlijk geven. (op te lossen door een meta tag.)
Met sessies? Nee hoor. En dan nog kan je altijd output buffering toepassen.

[ Voor 72% gewijzigd door XWB op 30-03-2006 17:12 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
Even alles een beetje op orde dus eerst kijken of de gegevens wel goed uit de database gehaald wordt zodat een inlogfout uitgesloten kan worden.

Ik verander namen2.php in:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
   switch ($_GET['p'])
   {
        case 'ja' :
            include('namen4.php');
            break;
        case 'nee' :
            include('namen3.php');
            break;
        default :
            include('namen3.php');
            break;
   }
?>


En het relevante verwerkingsstukje in:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
if($voornaam1 == $voornaam)
            {
                //$_SESSION['toegang'] = 'ja';
                header("Location: namen2.php?p=ja");
            }
            else
            {
                //$_SESSION['toegang'] = 'nee';
                header("Location: namen2.php?p=nee");
            }
            mysql_close();
            //header("Location: namen2.php");


Nu voer ik mijn inloggegevens in en klik op Inloggen en ik ga netjes naar namen2.php?p=ja. Hieruit trek ik de conclusie dat er niets mis is met mijn login.

Nu verander ik namen2.php (zoals Hacku zegt) in:

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

echo("".$_SESSION['toegang']."");

if (isset($_SESSION['toegang'])) 
{
   switch ($_SESSION['toegang'])
   {
        case 'ja' :
            include('namen4.php');
            break;
        default :
            include('namen3.php');
            break;
   }
}
?>


En het relevante gedeelte van de login verander ik weer in:

PHP:
1
2
3
4
5
6
7
8
9
10
if($voornaam1 == $voornaam)
            {
                $_SESSION['toegang'] = 'ja';
            }
            else
            {
                $_SESSION['toegang'] = 'nee';               
            }
mysql_close();
header("Location: namen2.php");


En nog doet hij het niet, gebruik ik de sessies niet op een verkeerde manier ofzo?

Acties:
  • 0 Henk 'm!

  • KappuhH
  • Registratie: Augustus 2004
  • Niet online
Shame... ik was een session_start() vergeten op namen4.php :X
Pagina: 1