WN

WN (https://www.wn.se/forum/index.php)
-   Klientsidans teknologier, design och grafik (https://www.wn.se/forum/forumdisplay.php?f=12)
-   -   Kolla om man är på sida från javascript (https://www.wn.se/forum/showthread.php?t=1057569)

secag 2013-04-14 14:40

Kolla om man är på sida från javascript
 
Hej,

Jag har gjort en liten shoutbox där man även ser vilka som är inne på shoutboxen. För att vet vilka som är inne kollar jag först på varje sida om sidan man är inne på är /chat.php vilket jag får ifrån PHPs konstant $_SERVER["PHP_SELF].

Om man då är på /chat.php så flaggar jag en kolumn till 1 som heter "in_chat" på användarens rad i databasen.

Med AJAX hämtar jag nu alla rader i medlemslistan är in_chat = 1.
Detta funka då fin fint tills en användare bestämmer sig för att öppna en ny tab. Då slinker han ut ur chattsidan eftersom in_chat ändras till 0. Vad ska jag göra för att motverka det här?

Du kan testa det här:
http://www.muggem.com/
Logga in med muggem/muggem. Sidan heter "Shoutbox" som ni hitter i menyn till vänster.

leonard 2013-04-14 14:55

Vet inte om jag riktigt förstått det hela rätt, när jag prövar att öppna en ny flik stannar jag fortfarande kvar på shoutbox-sidan? D.v.s "muggem" username står kvar i "in chat" och klockan fortsätter ticka?

Men ett alternativ är väl att skapa en cookie med hjälp av jquery som finns en begränsad tid, och när användaren tabbar tillbaka till fliken så förnyas cookien. Men om användaren inte tabbar tillbaka under låt oss säga 10 minuter så försvinner cookien och "in_chat" sätts till 0 via en ajax-kontroll som kollar om användaren har kakan eller ej.

Kanske är helt missuppfattat, isåfall ber jag om ursäkt!

secag 2013-04-14 15:04

Jag menade att man på den andra fliken går till en helt annan sida :)

leonard 2013-04-14 15:06

Ah ok. :)

Då skulle jag nog isåfall kört med en cookie som sparas i typ 10 minuter, som förnyas när man är inne på shoutboxen. Sen ett ajax-anrop som med jämna mellanrum kontrollerar ifall den finns eller ej.

JesperA 2013-04-14 21:35

Gör det lätt för dig istället.

Gör en MEMORY tabell som heter tex InChat där du helt enkelt bara lagrar AnvändarID, och datetime eller whatever, besöker då användaren chat.php så lägg bara in en rad i tabellen, sen kan du bestämma hur länge en besökare skall kunna vara inaktiv innan raden tas bort från databasen, tex 20 minuter, så ta bort alla rader i databasen där datetime är äldre än 20 minuter.

Tar 1 minut att skapa tabellen i databasen och tar 1 minut att ändra dina redan befintliga queries

weirdbyte 2013-05-25 13:01

Du borde kolla upp longpulling och websockets, med dessa kan du omedelbart få reda på om någon lämnar sidan.

secag 2013-05-25 17:51

har gått över till nodejs istället :) nu flyter allt på sjukt bra :D använder också socket.io


Alla tider är GMT +2. Klockan är nu 18:27.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson