[PHP] wazig probleem met session vars

Pagina: 1
Acties:

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Ik heb een tijdje terug m'n login systeem omgebouwd naar session support ipv cookie only, omdat ik binnenkort de functionaliteit wil gaan uitbreiden van ingelogde leden.

nu het probleem:

Ongeveer 1 op de 10 computers kan _niet_ inloggen! Die wordt gewoon teruggeschopt naar het scherm waar ze hun username en wachtwoord weer in moeten vullen.

Ik ben er inmiddels uit dat de selectie uit de db om te checken of user / ww kloppen correct is, dus het moet ergens gebeuren tussen het traject session plaatsen » session uitlezen

De code omtrent het afhandelen van de login:

eerst wordt er op deze manier gecheckt op welke manier er ingelogd is:
PHP:
1
<?if (!session_is_registered("username"))     {        session_register("username");        session_register("password");    }if (empty($_SESSION['username']) &amp;&amp; !empty($_POST['username']))     {         $user = $_POST['username'];         $pass = $_POST['password'];    }else     {          $user = $_SESSION['username'];        $pass = $_SESSION['password'];    }?>

daarna wordt in een switch() met de $user en $pass deze functie aangeroepen:
PHP:
1
<?function validatelogin($username, $password)    {        $password = str_replace(' ','', $password);        $password = trim(strtoupper($password));                        $query = "select lidnr, postcode from leden where lidnr = '$username' and postcode = '$password'";        $result = mysql_query($query) or die (mysql_error());        $array = mysql_fetch_array($result);        if (!empty($array[0]) &amp;&amp; $array[0] == $username &amp;&amp; !empty($array[1]) &amp;&amp; $array[1] == $password)            {                  $result = true;            }        else            {                $result = false;            }            return($result);    }?>

zo dus:
PHP:
1
<?switch(validatelogin($user, $pass)){ case false:    {         // schop de user terug naar het login scherm         break;        } case true:    {         // verder met afhandeling van page         break;    }?>

Niets mis mee volgens mij.

Om een beetje te kunnen debuggen heb ik de volgende code aangemaakt:
PHP:
1
<?switch ($action)            {                case 'killsession':                {                    if(isset($_COOKIE[session_name()]))                    {                    $_SESSION = array();                    session_destroy(); // To delete the old session file                    unset($_COOKIE[session_name()]);                    }                    die('session deleted');                    break;                }                case 'showsession':                {                    echo '<pre>$_SESSION data: <br>';                    print_r($_SESSION);                    echo '<br>$_POST data:<br>';                    print_r($_POST);                    echo '<br>$_COOKIE data:<br>';                    print_r($_COOKIE);                    echo '</pre>';                    die();                break;                }                            }?>

Waarmee na een test (van gitaarwerk geloof ik, daar doet ie et ook niet) naar voren kwam dat de variabelen die in de session staan op de een of andere manier veranderd waren naar wazige integers van ongeveer 8 cijfers!

Is er iemand die me kan helpen dit probleem te reproduceren?

Indien je zin heb om te checken voor me, mag je hier inloggen met de volgende gegevens:

Lidnummer: 31337
Postcode : 1337AB

Stop uploading passwords to Github!


  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

PHP:
1
<?$query = "select lidnr, postcode from leden where lidnr = '$username' and postcode = '$password'";?>

Waarschijnlijk een typo, maar ==> postcode != password

[edit]Nevermind.. dat hoort zo :)

SIZE does matter.
"You're go at throttle up!"


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Op woensdag 19 juni 2002 13:38 schreef Skinny het volgende:
PHP:
1
<?$query = "select lidnr, postcode from leden where lidnr = '$username' and postcode = '$password'";?>

Waarschijnlijk een typo, maar ==> postcode != password
Denk wel dat dat klopt hoor gezien de login informatie verderop in de post.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Op woensdag 19 juni 2002 13:38 schreef Skinny het volgende:
PHP:
1
<?$query = "select lidnr, postcode from leden where lidnr = '$username' and postcode = '$password'";?>

Waarschijnlijk een typo, maar ==> postcode != password
$password = een var die door het login scherm geset wordt. is gewoon een input type=password

postcode is de naam van de column die in de db staat.

Stop uploading passwords to Github!


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

maar 'wazig' van je 'wasigh' gemaakt :+
De eerste is een nederlands woord, de tweede een exmodje

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op woensdag 19 juni 2002 13:36 schreef Papa Eend het volgende:
Ik heb een tijdje terug m'n login systeem omgebouwd naar session support ipv cookie only, omdat ik binnenkort de functionaliteit wil gaan uitbreiden van ingelogde leden.
Vreemd, ik gebruik juist nooit sessions, maar altijd cookies, waardoor ik mijn eigen sessions kan opbouwen, en niet gelimiteerd zit aan de standaard session eigenschappen, waardoor ik stiekum meer functionaliteit kan bieden aan ingelogde leden.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • rvrbtcpt
  • Registratie: November 2000
  • Nu online
En als iemand dan zijn cookies heeft uitstaan ?

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Op woensdag 19 juni 2002 13:42 schreef dusty het volgende:

[..]

Vreemd, ik gebruik juist nooit sessions, maar altijd cookies, waardoor ik mijn eigen sessions kan opbouwen, en niet gelimiteerd zit aan de standaard session eigenschappen, waardoor ik stiekum meer functionaliteit kan bieden aan ingelogde leden.
Mjah... maar ik zat met een dik script waarvoor ik niet alle waarden in de cookie wou proppen. die loop ik liever gelijk door met een loopje dat alle $_POST vars doorloopt en dan gelijk checkt of die waarde al bestaat. zo niet » toevoegen aan session.
Op woensdag 19 juni 2002 13:47 schreef Frijns.Net het volgende:
En als iemand dan zijn cookies heeft uitstaan ?
dan mag hij lekker met de hand achter elke url de session id gaan kloppen :Y)

Stop uploading passwords to Github!


  • Maestro
  • Registratie: Februari 2001
  • Laatst online: 00:52
Gaat op de desbetreffende PC's die sessie niet verloren door een firewall o.i.d. Ik had iets soortgelijks met ZAP. (Remove private header information, geloof ik)

Wire telegraph is a kind of a very, very long cat. You pull his tail in NYC and his head is meowing in LA. Do you understand this? And radio operates the same way: you send signals here, they receive them there. The only difference is there's no cat


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op woensdag 19 juni 2002 13:47 schreef Frijns.Net het volgende:
En als iemand dan zijn cookies heeft uitstaan ?
Dan moet je het op dezelfde manier oplossen hoe het wordt gedaan met sessions. Maakt namelijk verder compleet geen verschil.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Op woensdag 19 juni 2002 14:10 schreef Maestro- het volgende:
Gaat op de desbetreffende PC's die sessie niet verloren door een firewall o.i.d. Ik had iets soortgelijks met ZAP. (Remove private header information, geloof ik)
Dat durf ik dus (nog) niet te zeggen, omdat ik gewoon nog té weinig informatie hierover heb.

De meeste mensen die bij me komen klagen weten namelijk zo'n beetje net hoe ze hun pc aan moeten zetten :{

Stop uploading passwords to Github!


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op woensdag 19 juni 2002 13:52 schreef Papa Eend het volgende:
[..]
Mjah... maar ik zat met een dik script waarvoor ik niet alle waarden in de cookie wou proppen. die loop ik liever gelijk door met een loopje dat alle $_POST vars doorloopt en dan gelijk checkt of die waarde al bestaat. zo niet » toevoegen aan session.
[..]
Dan doe je het fout, want je zet maar een keer een sessieID, dus je zet maar een keer die cookie. De rest sla je toch echt lokaal op de pc op.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Op woensdag 19 juni 2002 13:36 schreef Papa Eend het volgende:
Ik heb een tijdje terug m'n login systeem omgebouwd naar session support ipv cookie only, omdat ik binnenkort de functionaliteit wil gaan uitbreiden van ingelogde leden.
Op woensdag 19 juni 2002 13:42 schreef dusty het volgende:
Vreemd, ik gebruik juist nooit sessions, maar altijd cookies, waardoor ik mijn eigen sessions kan opbouwen, en niet gelimiteerd zit aan de standaard session eigenschappen, waardoor ik stiekum meer functionaliteit kan bieden aan ingelogde leden.
Ik dacht toch echt altijd dat sessions makkelijker werkten en dat je echt niet minder functionaliteit hebt met sessions. Sessions zijn toch alleen maar cookies die op de server worden opgeslagen? En (standaard) weer verdwijnen bij het sluiten van de browser. Voor de rest zitten er toch echt geen verschillen in met cookies?!

Verwijderd

Ik heb nu recentelijk bij twee machines die een PHP + server draaiden ontdenkt dat ie terugkwam omdat de data uberhaupt niet gepost werd! :?

Ben er niet uit gekomen waarom dat gebeurde...opnieuw geinstalleerde server en/of php en het werkt met dezelfde code..

doe andere formulieren het ook bij die betreffende mensen (als je nog andere forumulieren gebruikt tenminste..)

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

ik kom er iig in
$_SESSION data: Array
(
[username] => 31337
[password] => 1337AB
)
$_POST data:Array
(
)
$_COOKIE data:Array
(
[PHPSESSID] => c1c1db6be134d9ed0702b86040393624
)

Ontwikkelaar van NPM library Gleamy


Verwijderd

Op donderdag 20 juni 2002 01:47 schreef gitaarwerk het volgende:
ik kom er iig in
Dat kreeg ik net ook te zien, dus't moet werken :)

Verwijderd

Bij mij doet ie het ook gewoon... Zit zelf trouwens achter een firewall...

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Op donderdag 20 juni 2002 01:47 schreef gitaarwerk het volgende:
ik kom er iig in
[..]
Klopt die werkt :)

Is er nog iemand bij wie et niet lukt?

Stop uploading passwords to Github!


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op woensdag 19 juni 2002 15:08 schreef zellufs het volgende:

Ik dacht toch echt altijd dat sessions makkelijker werkten en dat je echt niet minder functionaliteit hebt met sessions. Sessions zijn toch alleen maar cookies die op de server worden opgeslagen? En (standaard) weer verdwijnen bij het sluiten van de browser. Voor de rest zitten er toch echt geen verschillen in met cookies?!
Niet helemaal.. Er wordt gewoon een cookie bij de client gezet met een random, maar unieke waarde. Vervolgens wordt op de server een bestandje opgeslagen met als naam die random waarde en hierin worden de sessionvars opgeslagen.

Dat 'standaard verwijderen' klopt ook niet helemaal. Dat gebeurt niet bij het sluiten van de browser, maar waneer de session wordt gedestroyed of waneer deze verlopen is. Soms (het gebeurt mbv een kans) kijkt PHP of er misschien nog session bestanden staan die na hun houdbaarheids datum zijn. Als dit het geval is wordt deze gewist..

Wat Dusty bedoeld is dat hij liever zelf zijn eigen sessionhandler schrijft. hierdoor heb je meer controle over de manier waarop sessions worden onthouden. Je zou ze dan bijvoorbeeld in de DB kunnen opslaan ipv in een bestand. Dit kan weer voordelen hebben bij andere dingen voor je site (who's online, op afstand uitloggen ed)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
http://bugs.php.net/bug.php?id=15983 of

http://bugs.php.net/bug.php?id=17846


Kwestjion is dan dus:

• in welke versie wordt dit gefix0rt
• helpt het om de sessions bijv. in de DB op te slaan.


* PaPa Eend gaat ff dat stukje over workarounds lezen

Stop uploading passwords to Github!


Verwijderd

wat voor php versie heb je dan?

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op donderdag 20 juni 2002 11:49 schreef Janoz het volgende:
[..]
Wat Dusty bedoeld is [..]
Eerst gaat iedereen slotjes zetten, zodat ik bijna geen slotjes meer hoeft te zetten, nu gaat men zelfs mijn standpunten uitleggen :+

Ander voordeel van een eigen sessionhandler is dat je precies kan bepalen wat er gedaan wordt, en niet tegen onverwachte bugs aanloopt waar je niets aan kan veranderen.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1