sark9012
sark9012

Reputation: 5717

Log what page the user is currently on

I have a chatroom on my website. I want to compile a list of online users in the chatroom.

What is the best way to do this? Would it be to log the last page the user visited and if it was that page, they are in the chatroom?

What different techniques can be used to do this?

Thanks

Upvotes: 0

Views: 214

Answers (4)

Hugh Bothwell
Hugh Bothwell

Reputation: 56624

Yshout works by doing an AJAX request against yshout/yshout.php every 6 seconds. Add a bit of code to yshout.php to track how many unique users it's seen in the last 10 seconds, and you should be set.

Edit: you want the names of everyone active in the chatroom? I'd be tempted to add a database table for this - every time they hit yshout.php, add a name+timestamp entry and delete all entries more than 10 seconds old. Then query with GROUP BY name to get unique users.

Edit 2: The chat client already does an AJAX request on yshout.php every six seconds. All you have to do is add a snippet of PHP code inside the 'if (isset($_POST['reqFor']))' clause (the bit that responds to the AJAX requests).

Keep it brief! Remember, it's going to get hammered on something like 150 times per minute.

Upvotes: 0

PeeHaa
PeeHaa

Reputation: 72652

You should make a javascript request to the server every x seconds.

You already have to do this (for retrieving the ongoing chat conversation and the list of users participating).

On the server side you know what users are on because of this request. You just have to log these requests.

Upvotes: 0

Sandwich
Sandwich

Reputation: 2289

I would use sessions javascript library to record each page the user has visited and then retrieve those values in your chat client via javascript.

  • include the library on each page.
  • in the sessvars object, make an array sessvars.visited = []; [if sessvars.visited is not already an array]
  • Now on each page do something like this sessvars.visited[] = location.href
  • On the chat client page, use javascript to iterate through sessvars.visited to obtain all the URLs. For example, To list out the URLs in HTML w/ Jquery do the following:

var urlList = '';
$.each(sessvars.visited, function(key, value){
    urlList += value + '<br />';
})

Note: Sessvars is an alternative to Cookies that has a very large capacity (10mb in most browsers). However, session data is only available in an active window. Information is lost once the window is closed, and as far as I know cannot be queried from other windows. So if chat is open in a different window than they were browsing in, this will not work.

Upvotes: 0

jamesmortensen
jamesmortensen

Reputation: 34038

If you're using Comet in your chat application, then you'll have a channel open to the server, which would be bound to the client side as an open HTTP request.

As long as that request is open, the user is in the room. If the request closes, then the user is no longer in the room.

Upvotes: 1

Related Questions