Logintime geupdate, logt nog uit...
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
Code (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
61
62
63
64
65
66
67
68
69
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
61
62
63
64
65
66
67
68
69
<?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']."'"));
?>
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
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
include ("gegevens.php");
include "functions.php";
$id = $get_userdata['id'];
mysql_query("UPDATE sessions SET logintime = NOW() WHERE userid = ".$get_userdata['id']." ")
?>
include ("gegevens.php");
include "functions.php";
$id = $get_userdata['id'];
mysql_query("UPDATE sessions SET logintime = NOW() WHERE userid = ".$get_userdata['id']." ")
?>
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.
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
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:
Code (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
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
<?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();
}
?>
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();
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Jaap V
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.
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
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...
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.
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
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?
Of dat te realiseren is, dat is zeker mogelijk, afhankelijk van je skils.
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'
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.
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
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...
Gewijzigd op 01/01/1970 01:00:00 door Jaap V
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.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
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();
}
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 sessie in de database verloopt (nog) niet.
verder is het onzinnig om je cookies aan te passen of te overschrijven.
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!
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.
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...
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.