Ik ben gisteren en vrijdag een hele tijd bezig geweest met logintime updaten in mijn database via onkeydown()


nu update hij de tijd,
maar waar ik nu achter kom is dat hij nog gewoon uitlocht na 5 minuten login...
terwijl dit eigelijk niet hoort te kunnen odmat hij overnieuw moet gaan tellen...


ik denk dus dat ik ergens iets over het hoofd heb gezien,
als ik inlog wordt er functions.php geinclude,
ik zal deze even posten:

wat ik nu al gedaan heb is bij iedere toetsaanslag op bepaalde pagina's...
dat hij update uitvoert en de tijd van login naar nu zet...

maar het blijkt dus dat hij deze niet controleerd met de tijd...
ik denk dat jullie hier meer mee kunnen,
als je nog meer pagina's nodig hebt laat dat even weten:

functions.php

<?php

include('config.php');

function sqlsafe($data) {
$data = mysql_real_escape_string($data);
return $data;
}



// Make MySQL-database connection
@mysql_connect($server, $user,$pass) or die ("Can't connect to MySQL database server");
@mysql_select_db($database) or die("Can't find database.");

// Start here the login action, and make the random hash
if(($_SERVER['REQUEST_METHOD'] == "POST") && ($_POST['login'])) {
     $selectleden = mysql_query("SELECT * FROM $ledentabel WHERE username = '".sqlsafe($_POST['username'])."' AND password = '".sqlsafe(md5($_POST['password']))."'");
     if(mysql_num_rows($selectleden)) {
                                      // Ingelogd
									  $ip=$_SERVER['REMOTE_ADDR'];
                                      $hash = md5(uniqid(rand(), true));
                                      $get_id = mysql_query("SELECT id FROM ".$ledentabel." WHERE username = '".sqlsafe($_POST['username'])."' AND password = '".sqlsafe(md5($_POST['password']))."'");
                                      mysql_query("UPDATE leden SET active=1 WHERE username='".sqlsafe($_POST['username'])."'"); 
									  $fetch_id = mysql_fetch_assoc($get_id);
                                      $insert_session = mysql_query("INSERT INTO sessions (id, userid, hash, logintime, ip) VALUES ('','".$fetch_id['id']."','".$hash."',NOW(), '".$ip."')");

                                      // for debugging:
                                      #$bericht = "Ingelogd met hash: ".$hash." En je hebt id-nummer:".$fetch_id['id'];


                                      if ($insert_session) {
                                         setcookie ("id", $fetch_id['id'],time()+$_POST['sessiontime']);
                                         setcookie ("hash", $hash,time()+$_POST['sessiontime']);
                                         header('location:menu.php');
                                                           } else {
                                                           echo "Fout in de query: ".mysql_error();
                                                           exit();
                                                           }
                                      }  else {
                                      // Foute pass
                                      $bericht = "<b>Je inloggegevens komen niet overeen met wat in de database staan.</b>";
                                      }



                                                                           }

// here is the function for the login-check
function checklogin() {
if (mysql_num_rows(mysql_query("SELECT userid, `hash` FROM `sessions` WHERE `userid` = '".sqlsafe($_COOKIE['id'])."' AND `hash` = '".sqlsafe($_COOKIE['hash'])."'"))) {

	    $return  = TRUE;
    } else {
		$return = FALSE;
		
    }

    return $return;
}

// Data uit leden-tabel oproepen ($get_userdata['username'], $get_userdata['warnings']
$get_data_qry = mysql_query("SELECT userid, `hash` FROM `sessions` WHERE `userid` = '".sqlsafe($_COOKIE['id'])."' AND `hash` = '".sqlsafe($_COOKIE['hash'])."'");
$get_data = mysql_fetch_assoc($get_data_qry);
$get_userdata = mysql_fetch_assoc(mysql_query("SELECT * FROM $ledentabel WHERE id = '".$get_data['userid']."'"));



?>


ik zie hem in dat script dus alleen bij inloggen een sessiontime meegeven,
deze wordt ingesteld op login pagina 5 min 10 min 15 min etc...

dit is dat update script:

updatetime.php
<?php
include ("gegevens.php");
include "functions.php";
$id	  = $get_userdata['id'];
mysql_query("UPDATE sessions SET logintime = NOW() WHERE userid = ".$get_userdata['id']." ")
?> 
Dat zit er helaas nog niet in. Dit jaar ga ik het hele script zeker op de schop gooien :-).

Verder staat er echt geen sesisontime in de cookies. Hoogstens een verlooptijd. Maar goed, als je inlogt kan je die tijd bij je sessietijd optellen, zodat dat een verlooptijd wordt.

Dat is de bedoeling dat ik in een volgende release wil gaan doen.

 setcookie ("id", $fetch_id['id'],time()+$_POST['sessiontime']);
                                         setcookie ("hash", $hash,time()+$_POST['sessiontime']);
                                         header('location:menu.php');
                                                           } else {
                                                           echo "Fout in de query: ".mysql_error();
                                                           exit();
                                                           }


hier lijkt toch echt een sesiontime met cookie wordt meegegeven,
dit zal wel de verlooptijd zijn van cookie,
en dus verloopt de sessie dan ook...

maar deze kan ik naderhand niet updaten zeker?
want nu kan ik wel nieuwe aanmaken etc... maar deze hebben verschilende hashes
De leeftijd van de cookies is dat, niet een waarde.
De sessie in de database verloopt (nog) niet.

verder is het onzinnig om je cookies aan te passen of te overschrijven.
dus het is onmogelijk om een sessie aan te passen?

want hij controleerdt met de cookie of deze nog overeen komen,
id/hash...

maar na bijv 5 minuten is deze verlopen... (de cookie)
en kan hi jdus niets controleren en ben je uitgelogd...

bedankt alvast voor de reacties!
Tuurlijk kan dat..

Heel simpel: kijken bij het inloggen hoelang diegene ingelogd wilt zijn, tel die tijd op bij de sessiontime in de database.

Draai een extra scriptje die sessies verwijderd die over tijd zijn, et voila.
ik denk dat wij het niet over het zelfde script hebben...

want er wordt helemaal niet gecontroleerd over sessies in de database...
Incarnez schreef op 02.02.2010 14:14
ik denk dat wij het niet over het zelfde script hebben...

want er wordt helemaal niet gecontroleerd over sessies in de database...

Ik ken mijn eigen code prima.
En bovendien zit een sessie-opruiming er nog niet in. Maar dat had ik al eerder duidelijk gemaakt.

Reageren