2 sessies
ik heb een functie om een sessie in de database op te slaan, alleen pas na 2x uitvoeren (en dus 2x inserten in database) pakt hij daadwerkelijk de sessie, hoe kan dat?
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
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
<?php
function create_session($p_sUser){
$oDb = new database;
$sIp = $_SERVER['REMOTE_ADDR'];
$sClient = $_SERVER['HTTP_USER_AGENT'];
$sSql = "INSERT INTO ".prefix."sessions (user,session_begin,session_end,ip,client) VALUES ('".$p_sUser."',NOW(),NOW(),'".$sIp."','".$sClient."')";
$oDb->sql_query($sSql);
$sSql = "SELECT id,session_begin FROM ".prefix."sessions WHERE user=".$p_sUser." AND client='".$sClient."' AND session_begin <= ( NOW() - INTERVAL 1 SECOND )";
echo "<br />".$sSql."";
$aRow = $oDb->sql_array($oDb->sql_query($sSql));
$_SESSION['id'] = $aRow['id'];
$_SESSION['created'] = $aRow['session_begin'];
echo 'creating session';
}
function update_session(){
$oDb = new database;
if(!isset($_SESSION['id'])){
$this->create_session(0);
}
else{
$sSql = "UPDATE ".prefix."sessions SET session_end=NOW() WHERE id=".$_SESSION['id']." LIMIT 1";
echo $sSql;
$oDb->sql_query($sSql);
}
}
?>
function create_session($p_sUser){
$oDb = new database;
$sIp = $_SERVER['REMOTE_ADDR'];
$sClient = $_SERVER['HTTP_USER_AGENT'];
$sSql = "INSERT INTO ".prefix."sessions (user,session_begin,session_end,ip,client) VALUES ('".$p_sUser."',NOW(),NOW(),'".$sIp."','".$sClient."')";
$oDb->sql_query($sSql);
$sSql = "SELECT id,session_begin FROM ".prefix."sessions WHERE user=".$p_sUser." AND client='".$sClient."' AND session_begin <= ( NOW() - INTERVAL 1 SECOND )";
echo "<br />".$sSql."";
$aRow = $oDb->sql_array($oDb->sql_query($sSql));
$_SESSION['id'] = $aRow['id'];
$_SESSION['created'] = $aRow['session_begin'];
echo 'creating session';
}
function update_session(){
$oDb = new database;
if(!isset($_SESSION['id'])){
$this->create_session(0);
}
else{
$sSql = "UPDATE ".prefix."sessions SET session_end=NOW() WHERE id=".$_SESSION['id']." LIMIT 1";
echo $sSql;
$oDb->sql_query($sSql);
}
}
?>
Slechte code die voor veel problemen zal gaan zorgen. Tip: Ga een andere structuur bedenken, dit zal niet goed gaan werken.
Binnen iedere functie een nieuw database object aanmaken, lijkt me nergens voor nodig en onnodig veel performance te kosten. Hier ga je echt problemen mee krijgen, zeker wanneer je MySQL gebruikt. Die kan er toch al niet goed tegen wanneer er veel concurrent users zijn. Verder is het aanmaken van output binnen een functie niet handig, dat maakt de code bijzonder lastig te bouwen, debuggen en onderhouden.
Ik zie trouwens de hele meerwaarde van de functies niet, je bouwt iets om een sessie heen terwijl de sessie exact hetzelfde doet. Ga dan het gedrag van de sessies veranderen, je eigen sessie manager, lijkt me handiger.
Binnen iedere functie een nieuw database object aanmaken, lijkt me nergens voor nodig en onnodig veel performance te kosten. Hier ga je echt problemen mee krijgen, zeker wanneer je MySQL gebruikt. Die kan er toch al niet goed tegen wanneer er veel concurrent users zijn. Verder is het aanmaken van output binnen een functie niet handig, dat maakt de code bijzonder lastig te bouwen, debuggen en onderhouden.
Ik zie trouwens de hele meerwaarde van de functies niet, je bouwt iets om een sessie heen terwijl de sessie exact hetzelfde doet. Ga dan het gedrag van de sessies veranderen, je eigen sessie manager, lijkt me handiger.
Hoogstwaarschijnlijk komt dat door de volgorde waarin verschillende elementen van je script uitgevoerd worden en zul je de pagina eerst nog een keer moeten herladen voordat de sessieinformatie daadwerkelijk beschikbaar is.
Kijk dus nog eens goed naar de manier waarop je deze functies in je script gebruikt...
Kijk dus nog eens goed naar de manier waarop je deze functies in je script gebruikt...
uhm. op index.php staat gewoon




