Μετά από μια αποτυχημένη προσπάθεια ρώτησα σε ένα forum για το πώς μπορεί να γίνει κάτι τέτοιο και μου δείξανε τον σωστό δρόμο.
Η γενική ιδέα είναι η εξής:
Όταν έρχεται κάποιος στο site αποθηκεύουμε κάποιο μοναδικό χαρακτηριστικό του (στην περίπτωσή μας την IP του) είτε σε ένα αρχείο είτε στη βάση μας, μαζί με ένα timestamp για το πότε έγινε η συγκεκριμένη καταχώρηση.
Κάθε φορά μετά που ελέγχουμε το αρχείο, κοιτάμε ποια timestamps έχουν λήξει, σβήνουμε τις αντίστοιχες εγγραφές και ξαναποθηκεύουμε το αρχείο.
Με κώδικα θα είναι πιο κατανοητό το όλο θέμα:
<?php function checkUsers() { $timeout = 1500; //se deuterolepta $found = false; $users = file("users.txt"); foreach($users as $user) { $line = explode(" ", trim($user)); if(time() - $line[1] < $timeout) // an o xristis se auti ti grammi _DEN_ exei liksei { if($_SERVER['REMOTE_ADDR'] == $line[0]) // an o xristis pou irthe twra yparxei { $found = true; $line[1] = time(); //apla ananewnoume ton xrono tou } $newList[] = $line; //kai kanoume mia lista me tous energous xristes } } if(!$found) //an _DEN_ vrethike o xristis pou irthe twra sto arxeio { //tote dimiourgoume nea eggrafi kai ti vazoume sto telos tis listas me tous energous xristes $line[0] = $_SERVER['REMOTE_ADDR']; $line[1] = time(); $newList[] = $line; } //twra i newList periexei osous einai akoma online, opote kanoume tin eggrafi $pf = fopen("users.txt", "w"); if(is_array($newList) && count($newList) > 0) { foreach($newList as $line) { fwrite($pf, implode(" ", $line) . "\n"); } } fclose($pf); //kai telos epistrefoume ton arithmo twn xristwn pou einai online return count($newList); } ?>
Μπορεί κάλλιστα να επεκταθεί ώστε να κάνει διαχωρισμό και μεταξύ των εγγεγραμμένων ή μη χρηστών, και διάφορα άλλα πράγματα.
No comments:
Post a Comment