login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Site-Exit (Opgelost)

Offline nick5556 - 06/01/2010 18:45
Avatar van nick5556PHP beginner Ik heb op mijn site een systeem waarmee ik de online gebruikers bij houd, nu is alleen het probleem dat als iemand mijn site verlaat(sessies afsluit in sommige gevallen, dit doordat als de browser sluit, dat de sessies ook afsluiten). Dit geeft problemen op mijn pagina's doordat er dan meer leden online lijken als dat er werkelijk zijn.

Nu heb ik wat geprobeerd met de meta-tag 'Site-Exit' door de volgende code te gebruiken:
  1. <meta http-equiv="Site-Exit" content="<?PHP logout(); ?>" />


Nu is het probleem dat als ik ingelogd ben en daara naar de pagina ga waar de tag staat, log ik uit.

Is er een andere manier dmv php/javascript(gebruik ik liever niet) om mijn sessie's alsnog te sluiten.

BTW: Ik heb een rij genaamd 'Online' in mijn leden tabel staan. waarden zijn: 'true', 'false'.

Nick

17 antwoorden

Gesponsorde links
Offline Stijn - 06/01/2010 19:08
Avatar van Stijn PHP expert Site-Exit is een meta-tag voor IE? Dus daar mag je dan een streep door trekken aangezien 25% Firefox gebruikt. Je kan het doen met javascript maar heb er geen ervaring mee.
Offline nick5556 - 06/01/2010 19:10 (laatste wijziging 06/01/2010 19:14)
Avatar van nick5556 PHP beginner Dat is het probleem juist. Ik heb ook geen ervaring met javascript 

onUnload geprobeerd, dit werkt alleen niet, omdat als je naar een andere pagina van de website gaat, de pagina ook een unload uitvoert...
Offline Martijn - 06/01/2010 20:07
Avatar van Martijn Crew PHP je zou ajax kunnen doen doe elke 30sec update, is de laatst geupdate tijd >30sec = offline
Offline nick5556 - 06/01/2010 20:10
Avatar van nick5556 PHP beginner pfff. Hoe zou ik dat moeten oplossen. ajax en mij is net als een anafobeet met een woordenboek. Dat werkt niet.
Offline Stijn - 06/01/2010 20:33
Avatar van Stijn PHP expert @Martijn: dan moet je een proces hebben draaien aan je server kant. Als iemand connect, in de array van online users zetten en dan moet hij binnen de 30 seconden een ping ontvangen van de bezoeker. Dat is eigenlijk TCP/IP dat je uitlegt.
Offline ArieMedia - 07/01/2010 08:59 (laatste wijziging 07/01/2010 09:02)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Verwacht nooit dat mensen altijd netjes op het "log uit" knopje drukken. Je maakt gewoon een extra sessie aan, en aan de hand daarvan ga je jou tabel updaten.

  1. <?php
  2. $iInterval = 300;
  3. $iTijd = time() + $iInterval;
  4. if(!isset($_SESSION['refresh']) || $_SESSION['refresh'] < time()) {
  5. $_SESSION['refresh'] = $iTijd;
  6. $sql = 'UPDATE gebruikers
  7. SET tijd = '.$_SESSION['refresh'].'
  8. WHERE id = '.$_SESSION['id'];
  9. }
  10. ?>


Edit:
nick5556 schreef:
BTW: Ik heb een rij genaamd 'Online' in mijn leden tabel staan. waarden zijn: 'true', 'false'.

Verander dat veld naar int(11)
Offline Richard - 07/01/2010 10:18
Avatar van Richard Crew algemeen http://wiki.php...ers_tellen

int(11)? Waarom niet gewoon int? :-)
Offline ArieMedia - 07/01/2010 13:24
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Richard schreef:
http://wiki.php...ers_tellen

int(11)? Waarom niet gewoon int? :-)
is hetzelfde, alleen ik geef de hoeveelheid aan hoeveel tekens er in mogen.
Offline Richard - 07/01/2010 13:26
Avatar van Richard Crew algemeen Nietes, jij geeft aan hoeveel tekens de uitvoer moet zijn. Oftewel, een 1 in een int(11) komt (mysql < 5) eruit als 10 spaties en een 1.
Offline ArieMedia - 07/01/2010 13:30
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Richard schreef:
Nietes, jij geeft aan hoeveel tekens de uitvoer moet zijn. Oftewel, een 1 in een int(11) komt (mysql < 5) eruit als 10 spaties en een 1.
Dus, dan is die 1 niet meer een int maar eigenlijk een string waar een int in staat? of interpreteer ik het nu verkeerd?
Offline Richard - 07/01/2010 13:31
Avatar van Richard Crew algemeen Jup. Zo krijg je overigens alles terug van de database, behalve NULL.

Gewoon een lengte van 1 invullen, het is echt niet nodig.
Offline ArieMedia - 07/01/2010 13:36
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Richard schreef:
Jup. Zo krijg je overigens alles terug van de database, behalve NULL.

Gewoon een lengte van 1 invullen, het is echt niet nodig.
Interessant, maar als ik hem var_dump krijg ik het aantal chars terug die hij daadwerkelijk heeft.. en niet hoeveel ik in de database aangeef.
Offline Richard - 07/01/2010 13:43
Avatar van Richard Crew algemeen
ArieMedia schreef:
[..quote..]Interessant, maar als ik hem var_dump krijg ik het aantal chars terug die hij daadwerkelijk heeft.. en niet hoeveel ik in de database aangeef.

Zoals ik al zei, dat was bij MySQL < 5. Vanaf 5 maakt het niet meer uit wat je invult dus is 1 prima. Het betekent toch niks.
Offline nick5556 - 07/01/2010 16:00
Avatar van nick5556 PHP beginner
ArieMedia schreef:
Verwacht nooit dat mensen altijd netjes op het "log uit" knopje drukken. Je maakt gewoon een extra sessie aan, en aan de hand daarvan ga je jou tabel updaten.


Op het moment dat ik deze code gebruik is mijn probleem nog steeds niet opgelost, omdat ik bijvoorbeeld heb in gesteld dat als ik mijn browser sluit, dat alle sessies ook afgesloten worden. Op het moment dat ik dan weer op mijn website kom is de kolom nog niet aangepast. Ik moet echt een stukje code vinden waarmee de server de functies pas uitvoert als ik mijn website afsluit.

Nick

Nick
Offline ArieMedia - 07/01/2010 16:41
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
nick5556 schreef:
[..quote..]

Op het moment dat ik deze code gebruik is mijn probleem nog steeds niet opgelost, omdat ik bijvoorbeeld heb in gesteld dat als ik mijn browser sluit, dat alle sessies ook afgesloten worden. Op het moment dat ik dan weer op mijn website kom is de kolom nog niet aangepast. Ik moet echt een stukje code vinden waarmee de server de functies pas uitvoert als ik mijn website afsluit.

Nick

Nick
Ik mag je nu al gaan vertellen dat je dit nooit 100% waterdicht kan maken. Als iemand javascript uit heeft staan, of de browser crashed dan hang je.
Offline nick5556 - 07/01/2010 16:46 (laatste wijziging 07/01/2010 16:47)
Avatar van nick5556 PHP beginner @Arie

Dat weet ik, alleen ik probeer mijn script wel zo waterdicht mogelijk maken.

Ik kan zowieso voor een controle een cronjob draaien die alle users die al een tijdje niks gedaan hebben op offline zetten.
Offline ArieMedia - 07/01/2010 16:51
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
nick5556 schreef:
@Arie

Dat weet ik, alleen ik probeer mijn script wel zo waterdicht mogelijk maken.

Ik kan zowieso voor een controle een cronjob draaien die alle users die al een tijdje niks gedaan hebben op offline zetten.
In 1 woord: Omslachtig.

Wanneer cron <-- lees die maar even door. Maar als je niet net iets meer werk wil verrichten waardoor je systeem beter werkt moet je het zelf weten, maar IMO is dat dom om te doen. 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.227s