If you're pairing session IDs off with users already, then if someone attempt to log in a second time on another machine, without logging off of the first, you basially have two options:
1) deny the new login and retain the old login
2) kill the old login and permit the new login
Using any sort of "who's online" method could cause inconsistent behaviour in the first case. If the old session is still being treated as "active" then the attempted new login will fail, but once the session expires they'll suddenly be able to log in.
The problem comes in because PHP only actually runs when it has a script to process; it hibernates in between scripts. So anything you want PHP to do has to be triggered by a script being requested. Even deletion of old sessions is like this (which is why a session with a max lifetime of 1 and collection probability of 100% actually lasts until the next time a script is hit.
What you really want is something that does monitor your session data on a regular basis. Something that will wake up on a regular basis, look around, and sees if it has anything to do. In short, a cron job. One that wakes up every minute (that's the shortest interval) and delete "stale" session files - those with a modification time older than n minutes ago.
You've got a tradeoff, of course: make it too short and you'll have users getting kicked out because they stopped to pick up their pen. Make it too long and you're back to having sessions sitting around that you don't want.
If you kept the randomish element of the session ID around, you could tell if they were attempting to use a different browser from the one they're currently logged in to. Actually, that gives you a third choice:
3) Ask the user which of (1) and (2) they want.