[php] Sessie blijft niet in leven :S ?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Ik maak op mijn website gebruik van sessies om gebruikers ingelogt te houden,
maar helaas werkt dat natuurlijk weer niet in 1x goed. Het is mij niet helemaal
duidelijk of het er nou aan ligt dat de sessie niet blijft bestaan, of dat de
variabelen niet goed worden geregistreerd ..

Url: http://62.131.154.4:2002/_Websites/MsnMeppel/new/index.php
alias: testuser
pass: test

(na inloggen, doorklikken naar andere pagina)

eerste regel van mijn index.php:
PHP:
1
include './global/basicHeader.php';


basicHeader.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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
session_start();
echo session_id();

function fnCheckLogin()
{
    global $HTTP_POST_VARS, $HTTP_SESSION_VARS;
    
    $objSessie = $HTTP_SESSIONS_VARS;
    
    if (($objSessie['alias']) && (!$HTTP_POST_VARS['btnLoginAttempt']) && (!$HTTP_POST_VARS['btnLogoutAttempt']))
    {
        echo '  Ingelogt als '.$objSessie['alias'].'<br />
            <form method="post"><input type="submit" name="btnLogoutAttempt" value="uitloggen" /></form>';
    }
    else
    {
        if ($HTTP_POST_VARS['btnLoginAttempt'])
        {

            if (!$HTTP_POST_VARS['txtAlias'])       echo 'Je hebt geen gebruikers-alias ingevult..<br />';
            else if (!$HTTP_POST_VARS['txtWachtwoord'])     echo 'Je hebt geen wachtwoord ingevult..<br />';
            else
            {
                $sqlUsers = mysql_query("SELECT * FROM tblGebruikers gebruikers WHERE gebruikers.varAlias = '".$HTTP_POST_VARS['txtAlias']."' AND gebruikers.varWachtwoord = MD5('".$HTTP_POST_VARS['txtWachtwoord']."')");
                
                if (mysql_num_rows($sqlUsers))
                {
                    while ($sqlUser = mysql_fetch_array($sqlUsers))
                    {
                        $alias  = $sqlUser['varAlias'];
                        $id = $sqlUser['intId'];
                        $email  = $sqlUser['varEmail'];

                        //Succesvol ingelogt..
                        session_register('alias');
                        session_register('id');
                        session_register('email');
                        
                        echo '  <b>Succesvol</b> ingelogt als '.$alias.'<br />
                            <form method="post"><input type="submit" name="btnLogoutAttempt" value="uitloggen" /></form>';
                    }
                }
                else
                {
                    echo 'Gebruikersalias/wachtwoord combinatie is niet geldig, probeer opnieuw..';
                }
            }
        }
        else if ($HTTP_POST_VARS['btnLogoutAttempt'])
        {
            session_destroy() or die('Uitloggen mislukt');
            
            echo 'Je bent succesvol uitgelogt: <a href="?mod=gebruikers/inloggen">inloggen</a>|<a href="?mod=gebruikers/aanmelden">aanmelden</a><br />';
        }
        else
        {
            echo 'Niet ingelogt: <a href="?mod=gebruikers/inloggen">inloggen</a>|<a href="?mod=gebruikers/aanmelden">aanmelden</a><br />';
        }
    }
}
(sorry voor de layout, maar zo is het het beste leesbaar..)

[ Voor 16% gewijzigd door r0bert op 03-05-2003 12:08 ]


Acties:
  • 0 Henk 'm!

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 08:38
Het gaat waarschijnlijk fout bij het zetten/lezen van de variabelen, omdat je sess_id wel steeds gelijk blijft.

Maak eens een pagina aan met alleen een paar testvariabelen:
PHP:
1
2
3
4
session_start();
echo session_id();
$blaat = "limhes";
session_register("blaat");

En kijk na het uitvoeren van deze pagina eens in het session-bestandje en kijk of blaat erin staat.

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Dat werkt wel:
http://62.131.154.4:2002/_Websites/MsnMeppel/new/session_test.php

PHP:
1
2
3
4
5
6
7
8
9
10
11
session_start(); 
echo session_id(); 

foreach ($HTTP_SESSION_VARS as $strIndex => $strValue)
{   echo $strIndex.' - '.$strValue.'<br />';    }

$blaat = "limhes"; 

session_register("blaat");

echo '<br /><br /><a href="?">link naar deze pagina</a>';

Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

uhm vroeger (discl: niet met de nieuwe versie getest) deed ik dit
session_set_cookie_params(0);

0 vervangen door je eigen waarde

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Zoals in het testbestandje is te zien, werkt het ook met de normale functies.. daarom zou ik session_set_cookie_params(); graag als alternatief voor nood willen bewaren en het eerst op de normale/gangbare manier proberen op te lossen..

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

welke PHP versie praten we hier over? Ik weet dat 4.1.2 nogal buggy is mbt sessies, en heb dat zelf ook ondervonden.
Mocht het om een latere versie gaan, probeer het dan eens met superglobals. Wel oppassen dat je dan in je sessie niet dezelfde indexes gebruikt als de namen van je variabelen, dat kan nog wel eens voor onverwachte effecten zorgen als register_globals aan staat.

Krijg je trouwens geen notices op dit soort constructies:
PHP:
1
if (($objSessie['alias']) && (!$HTTP_POST_VARS['btnLoginAttempt']) && (!$HTTP_POST_VARS['btnLogoutAttempt']))

?

[ Voor 21% gewijzigd door crisp op 03-05-2003 12:55 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
http://62.131.154.4:2002/_Websites/MsnMeppel/new/phpinfo.php

Register_globals staat aan
en mijn php versie is inderdaad wel oud, maar ik zou het toch graag werkende hebben, ook met deze versie..

En wat is er eigenlijk fout aan die constructie dan .. ? Bedoel je dat die if statement beter onderaan geplaatst kan worden met een else if ? Zo heb ik het nu iig gefixed :)

edit:
Het is waarschijnlijk wel iets met die (super)globals.. want buiten de fnCheckLogin functie wil het allemaal prima met variabelen naar de sessie-variabelen schrijven, maar binnen de functie vertikt ie 't gewoon .. :?

[ Voor 37% gewijzigd door r0bert op 03-05-2003 13:07 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

r0bert schreef op 03 May 2003 @ 13:01:
http://62.131.154.4:2002/_Websites/MsnMeppel/new/phpinfo.php

Register_globals staat aan
en mijn php versie is inderdaad wel oud, maar ik zou het toch graag werkende hebben, ook met deze versie..

En wat is er eigenlijk fout aan die constructie dan .. ? Bedoel je dat die if statement beter onderaan geplaatst kan worden met een else if ? Zo heb ik het nu iig gefixed :)

edit:
Het is waarschijnlijk wel iets met die (super)globals.. want buiten de fnCheckLogin functie wil het allemaal prima met variabelen naar de sessie-variabelen schrijven, maar binnen de functie vertikt ie 't gewoon .. :?
superglobals kan je nu even vergeten, die zijn pas in 4.1.0 geintroduceerd ;)
op de een of andere manier lijkt het dan toch een scope probleem, ondanks dat je $HTTP_POST_VARS en $HTTP_SESSION_VARS netjes als global in je functie hebt gedefinieerd.
Probeer het eens zonder een kopie te maken van je $HTTP_SESSION_VARS in $objSessie.

En wat betreft notices: zet eens error_reporting(0); bovenin je script, dan zie je wel wat ik bedoel ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Dat kopieeren van $HTTP_SESSION_VARS naar $objSessie had ik er al uitgehaald..

Ik had hetvolgende geprobeerd

bestand.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
session_start();

echo $HTTP_SESSION_VARS['alias'];

function fnCheckLogin()
{
   global $HTTP_SESSION_VARS;
   
   $HTTP_SESSION_VARS['alias'] = 'test';
   // of $alias = 'test'; session_register('alias');
}

en zelfs dat werkte niet

[ Voor 9% gewijzigd door r0bert op 03-05-2003 13:20 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

r0bert schreef op 03 May 2003 @ 13:17:
Dat kopieeren van $HTTP_SESSION_VARS naar $objSessie had ik er al uitgehaald..

Ik had hetvolgende geprobeerd

bestand.php
[...]
en zelfs dat werkte niet
php.net:
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().
je voorbeeld is dus goed, maar je roept je functie niet aan.
Ik denk dat als je in je originele script ipv session_register ook:
PHP:
1
$HTTP_SESSION_VARS['alias'] = 'test';

gebruikt het moet werken :)

[ Voor 81% gewijzigd door crisp op 03-05-2003 13:30 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Zou op zich wel moeten ja :) maar is helaas dus niet zo..

Misschien handig om te laten zien zoals ik het script nu heb..
basicHeader.php

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

r0bert schreef op 03 May 2003 @ 13:53:
Zou op zich wel moeten ja :) maar is helaas dus niet zo..

Misschien handig om te laten zien zoals ik het script nu heb..
basicHeader.php
vaag, met die error_reporting op 0 verwacht ik sowieso een zooi notices.
waar roep je trouwens de functie fnCheckLogin aan? Doe je daarvoor niet ergens toevallig een initialisatie van $alias?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

crisp schreef op 03 May 2003 @ 14:05:
[...]

vaag, met die error_reporting op 0 verwacht ik sowieso een zooi notices.
waar roep je trouwens de functie fnCheckLogin aan? Doe je daarvoor niet ergens toevallig een initialisatie van $alias?
Error_reporting ( 0 ) betekent alle foutmeldingen uitschakelen!

Probeer error_reporting ( E_ALL )

zie http://www.php.net/manual/en/function.error-reporting.php

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

LuCarD schreef op 03 mei 2003 @ 14:08:
[...]


Error_reporting ( 0 ) betekent alle foutmeldingen uitschakelen!

Probeer error_reporting ( E_ALL )

zie http://www.php.net/manual/en/function.error-reporting.php
|:(
(dat krijg je als je dat al standaard in je php.ini zo hebt staan)

[ Voor 11% gewijzigd door crisp op 03-05-2003 14:12 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
error_reporting staat nu aan, maar ik kom er nog steeds niet uit..

Source bestandjes

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

worden er wel sessie-bestandjes aangemaakt in C:/phpdev3/php/sessiontemp/
ik zie trouwens dat ik in mijn eigen ini het pad heb zonder laatste /

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
http://gathering.tweakers.net/forum/list_messages/750521

Hier lees ik dat je sessie variabelen op de volgende manier binnen een functie kan toevoegen:
PHP:
1
2
3
4
5
6
function functienaam()
{
   $strVar = 'waarde';
   session_register('strVar');
   $GLOBALS['strVar'] = $strVar;
}
en dat lijkt te werken, dus ik denk dat ik het maar op deze manier op ga lossen :)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

mmmz, dan vind ik werken met superglobals ism register_globals = Off toch wat makkelijker...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Euhmz, kan dat dan ook met mijn versie PHP ?
gewoon register_globals uitzetten en dan kan ik overal $HTTP_SESSION_VARS gebruiken :? *dummy*

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

r0bert schreef op 03 May 2003 @ 15:09:
Euhmz, kan dat dan ook met mijn versie PHP ?
gewoon register_globals uitzetten en dan kan ik overal $HTTP_SESSION_VARS gebruiken :? *dummy*
Ik zou gewoon upgraden en met $_SESSION gaan werken persoonlijk...

Intentionally left blank

Pagina: 1