The way that I use doesnt rely on sessions, but on cookies.
The user logs in with username/password, and is issued a cookie containing user id and the hash of a pseudorandomly generated number.
When the user accesses another page, validation is performed using that cookie with the value stored in the database, upon which a new cookie is issued with a new hash.
Consequently, if you login from a different location, you change the hash, and so the logged in user's hash becomes invalid, thus the user is effectively logged out.
Of course, you can intercept the hash, but any attempt to use the hash changes the current hash, hence the user may discover the interception.