Выше уже описали, но я уточню как делал подобное сам. При авторизации пользователя (входе на сайт) я пишу в cookie значение специального поля в БД (пусть будет security_token). При вводе пользователем своих логина и пароля значение данного поля генерируется заново, затем обновляется в БД и записывается в cookies. На сайте, при переходе по страницам сравнивается значение данной cookie, а также cookie, отвечающей за авторизацию (которая хранит id сессии), с данными, находящимися в БД. Если значение cookie с именем security_token не совпадает со значением в БД, то значит, что кто-то вошел под тем же логином. А как поступить — зависит уже от требований.