session id of ip adres opslaan als record

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

S -

S -

16/06/2012 09:14:01
Quote Anchor link
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?
 
PHP hulp

PHP hulp

05/12/2022 22:13:59
 
Stephan Engberts

Stephan Engberts

16/06/2012 09:52:54
Quote Anchor link
Session ID is het ID die "uniek" wordt aangemaakt bij het openen van een browser.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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();
   }

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?PHP
   session_start();
   $sql = "SELECT nogiets FROM winkelmandjes WHERE id = ".$_SESSION['al_bekend'];
?>


Wat ook zou kunnen, al naar gelang je fijn vindt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?PHP
   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.
 
- SanThe -

- SanThe -

16/06/2012 13:19:56
Quote Anchor link
@Stephan: Aardig verhaal. Alleen je if() klopt niet.
if ($_SESSION['al_bekend']='') {
moet zijn
if ($_SESSION['al_bekend']=='') {
 
S -

S -

16/06/2012 18:47:19
Quote Anchor link
Dankje, hier kan ik wat mee. Is het nog verstandig om session_id() gehasht op te slaan? Of voegt dat niks toe aan de veiligheid?

Ik zal ip veranderen in session_id() nu en die in de database bij elke record opslaan.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.