А что если смотреть перменные окружения, которые остаются неизменными для каждого конкретного браузера при неоднократном заходе на сайт?
Например, возьмем переменные окружения:
HTTP_ACCEPT_ENCODING
HTTP_CONNECTION
REQUEST_METHOD
HTTP_ACCEPT
HTTP_ACCEPT_CHARSET
QUERY_STRING
REMOTE_PORT
HTTP_USER_AGENT
HTTP_CACHE_CONTROL
HTTP_ACCEPT_LANGUAGE
HTTP_COOKIE
REMOTE_ADDR
HTTP_KEEP_ALIVE
SERVER_PROTOCOL
HTTP_X_FORWARDED_FOR
GATEWAY_INTERFACE
DOCUMENT_ROOT
HTTP_VIA
HTTP_HOST
оставим только те которые неизменны на период сессии, к примеру(чем больше тем лучше):
HTTP_VIA
SERVER_PROTOCOL
HTTP_X_FORWARDED_FOR
GATEWAY_INTERFACE
REMOTE_ADDR
(еще можно какие нибудь, чем больше тем лучше)
Вскрипте получаем все эти данные, на основе какого либо алгоритма получаем уникальный ключ, этот ключ и бдует идентификатором сессии.
Данная система не будет работать только если взять два компьютера, поставить одинаковые ОС и браузеры, под ними заходить на сайт через elit proxy (прокси которые ни в одном из заголовков не остовляют следов о том что это прокси). Но наверное таких практически нет.