Sessions controleren
Ik ben bezig met een membersysteem, waarbij op veel paginas gechecked moet worden of iemand is ingelogd of niet. Het systeem werkt met sessies, maar ook met cookies om te kijken of de login onthouen moet worden. Nu wil ik eigenlijk, dat een sessie beindigd wordt als het browservester gesloten wordt, of als een bepaalde frame (die bij elke link refreshed) 30min niet meer gerefreshed is. Ik hoop dat iemand mij kan helpen, hieronder wat uitleg over het script:
Bij het inloggen worden de volgende sessies aangemaakt:
Code (php)
Als op login.php het vinkje is gezet bij 'onthoud mij' wordt het volgende ook nog uitgevoerd:
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
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
<?php
if(isset($_POST['onthoud'])){
$query = "UPDATE members SET ingelogd=1, ip ='".$_SERVER['REMOTE_ADDR']."' WHERE id='$id'";
mysql_query($query);
$id2 = $id;
for($i=0; $i<7; $i++){
$id2 = base64_encode($id2);
}
$lengte_c = strlen($id2);
$lengte_h = intval($lengte_c / 2);
$u = '';
for($i=0; $i<$lengte_h; $i++){
$u .= $id2[$i];
}
if($lengte_h==($lengte_c/2)){
$begin_pos = $lengte_c - $lengte_h;
} else {
$begin_pos = $lengte_c - $lengte_h-1;
}
$p = '';
for($i = $begin_pos; $i<$lengte_c; $i++){
$p .= $id2[$i];
}
for($i=0; $i<4; $i++){
$u = base64_encode($u);
$p = base64_encode($p);
}
setcookie("u", $u, time()+518400);
setcookie("p", $p, time()+518400);
}
?>
if(isset($_POST['onthoud'])){
$query = "UPDATE members SET ingelogd=1, ip ='".$_SERVER['REMOTE_ADDR']."' WHERE id='$id'";
mysql_query($query);
$id2 = $id;
for($i=0; $i<7; $i++){
$id2 = base64_encode($id2);
}
$lengte_c = strlen($id2);
$lengte_h = intval($lengte_c / 2);
$u = '';
for($i=0; $i<$lengte_h; $i++){
$u .= $id2[$i];
}
if($lengte_h==($lengte_c/2)){
$begin_pos = $lengte_c - $lengte_h;
} else {
$begin_pos = $lengte_c - $lengte_h-1;
}
$p = '';
for($i = $begin_pos; $i<$lengte_c; $i++){
$p .= $id2[$i];
}
for($i=0; $i<4; $i++){
$u = base64_encode($u);
$p = base64_encode($p);
}
setcookie("u", $u, time()+518400);
setcookie("p", $p, time()+518400);
}
?>
In het stuk PHP dat controleerd of iemand is ingelogd, gebeurt onder andere het volgende:
Code (php)
En dit sutk staat ook nog in het gedeelte dat de login controleerd, wat betrekking heeft op de cookies:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if(isset($_COOKIE['u']) AND isset($_COOKIE['p'])){
$u = $_COOKIE['u'];
$p = $_COOKIE['p'];
for($i=0; $i<4; $i++){
$u = base64_decode($u);
$p = base64_decode($p);
}
$id = $u.$p;
for($i=0; $i<7; $i++){
$id = base64_decode($id);
}
$ingelogd_resultaat = mysql_query("SELECT ingelogd FROM members WHERE id='$id'");
$ingelogd = mysql_result($ingelogd_resultaat, 0);
if($ingelogd == 1){
$ip_db_resultaat = mysql_query("SELECT ip FROM members WHERE id = '$id'");
$ip_db = mysql_result($ip_db_resultaat, 0);
if($ip_db != $_SERVER['REMOTE_ADDR']){
$controle = 0;
header("Location: login.php");
exit;
?>
if(isset($_COOKIE['u']) AND isset($_COOKIE['p'])){
$u = $_COOKIE['u'];
$p = $_COOKIE['p'];
for($i=0; $i<4; $i++){
$u = base64_decode($u);
$p = base64_decode($p);
}
$id = $u.$p;
for($i=0; $i<7; $i++){
$id = base64_decode($id);
}
$ingelogd_resultaat = mysql_query("SELECT ingelogd FROM members WHERE id='$id'");
$ingelogd = mysql_result($ingelogd_resultaat, 0);
if($ingelogd == 1){
$ip_db_resultaat = mysql_query("SELECT ip FROM members WHERE id = '$id'");
$ip_db = mysql_result($ip_db_resultaat, 0);
if($ip_db != $_SERVER['REMOTE_ADDR']){
$controle = 0;
header("Location: login.php");
exit;
?>
In logout.php staat tevens het volgende:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
setcookie("u", "", time() - 3600);
setcookie("p", "", time() - 3600);
$_SESSION = array();
session_destroy();
mysql_query("UPDATE members SET ingelogd = 0 WHERE id = '$id'");
?>
setcookie("u", "", time() - 3600);
setcookie("p", "", time() - 3600);
$_SESSION = array();
session_destroy();
mysql_query("UPDATE members SET ingelogd = 0 WHERE id = '$id'");
?>
Het probleem is dus, dat als ik nu inlog, dat ik dan zo ongeveer 2weken ingelogd sta, en op elke pagina dus ook wordt weergegeven dat ik online ben. Nu wil ik weten, of ik in mijn config.php, die over is geinclude, daar een stukje kan maken, die controleerd of de sessies nog actief zijn, en ze anders verwijderd, en in de tabel ingelogd op 0 zet. Als een gebruiker dan een pagina opvraagd waar config.php is geinclude, update hij die sessie, en verwijderd hij de 'verlopen' sessies.
Ik hoop dat iemand het snapt, en als je de volledige bestanden nodig heb om mij te helpen hoor ik het graag, dan kan ik ze mailen.
Alvast hartelijk bedankt, Sam
Dus, dan controleer je niet of de sessie bestaat, maar wanneer de laatste handeling was.
Je zou dan kunnen stellen dat een gebruiker online is, al zijn laatste actie b.v.b. niet langer dan 3 minuten geleden heeft plaat gevonden.
hoe kan ik dan die sessies van die persoon verwijdere?
Bedankt, Sam
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$_SESSION = array ();
if (isset ($_COOKIE['session_name ()'])) {
setcookie (session_name (), '', time () - 42000, '/');
}
session_destroy ();
header ('Location: http://www.jouwsite.nl/index.php');
exit;
?>
$_SESSION = array ();
if (isset ($_COOKIE['session_name ()'])) {
setcookie (session_name (), '', time () - 42000, '/');
}
session_destroy ();
header ('Location: http://www.jouwsite.nl/index.php');
exit;
?>