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:
daarna wordt in een switch() met de $user en $pass deze functie aangeroepen:
zo dus:
Niets mis mee volgens mij.
Om een beetje te kunnen debuggen heb ik de volgende code aangemaakt:
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
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']) && !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]) && $array[0] == $username && !empty($array[1]) && $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