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']." ")
?> 
Bekend script :-P Schijnt dat de maker erg aardig is ;-)

Verder klopt het ja, dat de sessies volgens mij niet verwijderd worden. In een volgende release zal dat zeker aangepast worden.

Persoonlijk vind ik een AJAX request bij een onkeydown-event om te updaten erg onnodig. Je kiest toch bij het inloggen voor hoelang je ingelogd wilt blijven, dan lijkt het me logischer om gewoon aan die tijd te houden dan die tijd uit te rekken.

Het verwijderen van die sessies gebeurt nog niet automatisch, maar dat is verder niet lastig te doen. Je moet gewoon kijken of de sessiedatum kleiner is dan de huidige datum, en dan de sessie weggooien. De tijd die nu in inloggen.php wordt gebruikt is alleen van toepassing (nog) op de Cookie.
haha xD
goede maker ja,

sessie hoef zozeer ook niet verwijderd te worden,
maar die time to life ga ik nog wel even aanpassen,
maakt het de database wat overzichtelijker...
ik weet niet of je daar stukje script voor hebt?

ja inderdaad kies je daarvoor bij het inloggen...
maar hier mijn stagebegeleiders,
die kunnen vaak niet inschatten hoelang ze een logboek typen over wat ze bij de klant hebben uitgevoerd,
ze vinden het daarom namelijk gemakelijker dat hij bij iedere enter de database update (logintime)

maar dit heeft dus geen/weinig nut op de inlogtime hebi ka lgemerkt,

ik ben nu het updatetime.php script aan het aanpassen,
dat deze bij iedere enter het script wat hij bij login ook uitvoert uit te voeren,

volgens mij is dit niet super slim :P

of is het mogelijk om een cookie te updaten?

--update--

nu laat ik hem bij iedere toetsaanslag dit script uitvoeren:


<?php
include('config.php');
include ("gegevens.php");
include "functions.php";

// 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.");

// update database
$id	  = $get_userdata['id'];
mysql_query("UPDATE sessions SET logintime = NOW() WHERE userid = ".$get_userdata['id']." ")


// gegevens ophalen
									  $ip=$_SERVER['REMOTE_ADDR'];
                                      $hash = md5(uniqid(rand(), true));
                                      $get_id = mysql_query("SELECT id FROM ".$ledentabel." WHERE username = '".$id."' ");
                                      mysql_query("UPDATE leden SET active=1 WHERE username='".$id."'"); 
									  $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();
                                                           }
?> 
Die Time-to-Life is achteraf gezien niet echt zeer nodig. Zie mijn update...^^

Of je zet de logintime gewoon langer? Je kan hem ook op een paar uur zetten of op '9999999999' voor zo goed als oneindig? Als je elke keer een onKeyDown-event doet om de database te updaten, kunnen sommige database het zwaar krijgen. En dat wil je niet.

Je kan achteraf altijd handmatig nog uitloggen.
Een beetje discipline lijkt me handiger dan onnodige database query's.
die waardes vergelijken kan ik gewon in functions ofzo doen?

maar daar zet hij session time niet neer...
daar staat alleen logintime,
en deze is meteen kleiner dan tijd van nu...
en als hij die dan toch verwijderd als die niet klopt dna wordt je meteen uitgelogd? :P

verder heeft de logintime dus geen functie op tijd dat je ingelogd bent kwam ik al achter,

er zijn hier 4 leden die soms maar een logboek toe voegen...
dus echt zwaar zal database het niet krijgen...

jep handmatig uitloggen kan ook,
maar als ze een keer bij een klant zitten...
en ze vergeten uit te loggen,
dan kunnen de klanten ALLE klant gegevens inzien...
Incarnez schreef op 02.02.2010 09:40

maar als ze een keer bij een klant zitten...
en ze vergeten uit te loggen,
dan kunnen de klanten ALLE klant gegevens inzien...

Of de medewerker gebruikt een fatsoenlijke tijd bij het inloggen, of anders logt hij die sessie toch op zijn werk weer uit? :-)

Waarom wil je de database met onnoige query's bestoken, terwijl je zelf ook een inlogtijd kan bepalen? Als je die tijd uitrekt wordt het overigens niet meer consistent met wat er in de database staat. ;)

Maar als je het echt zo graag wilt:
Je zou in de Admin een tekst kunnen die aftelt hoeveel minuten de sessie nog duurt, en dat ze handmatig dan op een knop kunnen drukken om die te verlengen. Je kan zelfs met een arrogante alert() de mensen even op de tijd wijzen.
inderdaad ik denk dat die optie wel gemakelijker is...

k kan toch gewoon op iedere pagina waarbij tekst ingevoerd moet worden...
zijn er een stuk of 4...
zon teller neerzetten,
maar hoe moet ik die teller gaan maken?
dat is javascript aight?

en dan moet hij session time ook opslaan in database?
of kani k die vanuit cookie ophalen?

zodat hij weet hoelaat die persoon is ingelogd,
en hoeveel minuten/secondes hij nog heeft,
dan daarnaast een knop met update tijd! die hij dan wel gewoon uitvoert zonder pagina te refreshen zodat ze niet steeds al hun tekst kwijt zijn...

is dit allemaal te realiseren?
Javascript bijv.De sessiontime kan je uit de database ophalen.
Of dat te realiseren is, dat is zeker mogelijk, afhankelijk van je skils.
ik wil het best gaan proberen,
maar kun je cookies updaten?

wantm et dat script wat ik in mijn 2de post plaatste,
die maakt nieuwe cookies aan...
maar hij logt og gewoon altijd uit...

dus met die teller heeft ook weinig nut...
want moet er eerst achter zien te komen hoe ik mijn sessie kan 'updaten'

Ja, maar wat wil je updaten aan de cookie?
UserID en SessionID zullen niet zo snel veranderen, zodra je bent ingelogd.

Je kan toch een INTERVAL van 10 minuten ofzo gebruiken, om wat extra tijd te geven?
Staat netjes op de site van MySQL uitgelegd.
nee ik hoef userid of session id ook niet te veranderen,

maar daar wordt session time aan meegegeven...
ik vraag me af waarop hij basseert dat die sessie verlopen is,
want hij controlleert hem niet met de login time,
hij telt waarschijnlijk gewoon af...

dus hij moet eigelijk die tijd vernieuwen,
want bij een nieuwe cookie krijg je een andere hash mee...

Reageren