Вариант самый простой: при каждом обновлении страницы, менять пользовательскую cookie со значением, это же значение оставлять в свойствах объекта юзер на сервере. То есть в один момент времени только у одного человека валидная cookie и только он может получить следующую валидную. При логине в систему можно сбрасывать значение, чтобы не было подвисших сессий, которые невозможно завершить.
Это решает проблему одновременного доступа нескольких человек (одного из них будет постоянно выкидывать из системы), но не решает передачу пароля, когда попользовался один и зашел использовать другой, потом снова поменялись.
Вариант можно комбинировать с одноразовым паролем на почту или СМС, что затруднит жизнь передающему свой логин кому-то еще (постоянно придется что-то делать).
Второй эшелон, протоколировать одновременный вход с разных ip и или браузеров и тут уже от пользовательского соглашения зависит, что будет с человеком нарушившим условия использования (бан, штраф и т.д.).
Еще вариант: за деньги и/или на какой-то срок выдавать пакет одноразовых паролей, чтобы человеку было просто влом передавать их кому-то еще, Особенно, если реализован метод когда он вылетает после захода другого человека и вынужден использовать новый одноразовый пароль, а их и так впритык.