session id of ip adres opslaan als record
Op dit moment sla ik gegevens in een winkelwagentje op met het ip adres in een database. Maar volgens mij zijn er betere technieken. Ik las iets over session_id() maar ik weet er zelf niet genoeg van. Wat is een goede manier van een id toekennen aand een record? Session id, ip adres? Gebruik maken van een hash?
Dit betekent, dat dus verschillende pc's uit 1 huis (1 IP) verschillende session-ids hebben (en bijv firefox en internet-explorer op 1 pc dus ook).
Sessies zijn ook handig om 'lokale' variabelen in op te slaan, zonder dat je deze in de db wilt hebben maar verder eigenlijk nog wel nodig bent.
Let er op, dat waar je sessies of session-ids gebruikt in je code, elke pagina begint met "session_start()". Doe dit VOORDAT er ook maar enige output gegeven wordt. Het beste is dus op de allereerste regel!
Dus bijvoorbeeld op je homepage:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?PHP
session_start();
if ($_SESSION['al_bekend']='') {
$sql = "insert into winkelmandjes (sid,nogiets) values ('".session_id()."',"blabla");
$db->sq_query($sql);
$_SESSION['al_bekend'] = $db->get_insert_id();
}
?>
session_start();
if ($_SESSION['al_bekend']='') {
$sql = "insert into winkelmandjes (sid,nogiets) values ('".session_id()."',"blabla");
$db->sq_query($sql);
$_SESSION['al_bekend'] = $db->get_insert_id();
}
?>
Bij die pagina check je dus of iemand in de sessie-variabele al iets heeft. Is dat niet het geval, dan insert ie een nieuw winkelmandje en stopt het id van de row in de sessie-variabele.
Als je dan later het terug wilt herkennen, kun je eenvoudig iets al hetvolgende doen:
Code (php)
1
2
3
4
2
3
4
<?PHP
session_start();
$sql = "SELECT nogiets FROM winkelmandjes WHERE id = ".$_SESSION['al_bekend'];
?>
session_start();
$sql = "SELECT nogiets FROM winkelmandjes WHERE id = ".$_SESSION['al_bekend'];
?>
Wat ook zou kunnen, al naar gelang je fijn vindt:
Code (php)
1
2
3
4
2
3
4
<?PHP
session_start();
$sql = "SELECT nogiets FROM winkelmandjes WHERE sid = ".session_id();
?>
session_start();
$sql = "SELECT nogiets FROM winkelmandjes WHERE sid = ".session_id();
?>
Op deze manier kan je altijd het mandje terugvinden, zelfs al sluit men een tab en opent men opnieuw. Bij browser-close is ie weg (op de lokale pc dan).
Handig is dus om een timertje in te bouwen in je code, die de aanmaakdatum van een mandje controleert en wanneer die bijv. ouder is als 2 weken, het mandje automatisch op de achtergrond delete. Zo houdt je je db schoon.
Wil je dat het spulleboeltje echt helemaal op de pc onthouden wordt, dan kan je ook nog gebruik maken van Cookies.
if ($_SESSION['al_bekend']='') {
moet zijn
if ($_SESSION['al_bekend']=='') {
Ik zal ip veranderen in session_id() nu en die in de database bij elke record opslaan.