Получить уникальный идентификатор сеанса/ключ на стороне сервера

Я почти уверен, что то, что я ищу, существует, но я не нашел ни в документации Microsoft, ни здесь.

Я просто хочу получить уникальный идентификатор (строку или число, мне все равно) от клиента в ASP.NET 4.5 на стороне сервера. Я хочу, чтобы этот идентификатор был связан с сеансом, таким разным для каждой системы, которая будет подключаться к моему серверу (например, несколько компьютеров или один и тот же клиент с разными браузерами), но одинаковым, если пользователь открывает несколько вкладок в одном и том же браузере на моем сервере.

Я уже посмотрел:

  • System.Web.UI.Page.ClientID: это имя элемента управления (поэтому всегда "__Page").
  • System.Web.UI.Page.UniqueID: Он возвращает то же самое.
  • Session.LCID: Я не уверен, к чему это относится, но это то же самое, если я подключаюсь к своему серверу с помощью разных браузеров.
  • Session.SessionID: Менять каждый раз, когда я обновляю страницу или открываю ее в новой вкладке.
  • Request.AnonymousID: равно нулю.

Таким образом, все мои попытки дали мне идентификатор, который меняется каждый раз или никогда. Есть ли способ получить что-то из сеанса?


person Aracthor    schedule 22.05.2015    source источник


Ответы (2)


То, что вы ищете, на самом деле является Session.SessionID, однако с оговоркой.

Из MSDN:

При использовании состояния сеанса на основе файлов cookie ASP.NET не выделяет хранилище для данных сеанса до тех пор, пока не будет использован объект Session. В результате новый идентификатор сеанса генерируется для каждого запроса страницы до тех пор, пока не будет получен доступ к объекту сеанса. Если вашему приложению требуется статический идентификатор сеанса для всего сеанса, вы можете либо реализовать метод Session_Start в файле приложения Global.asax и сохранить данные в объекте сеанса, чтобы исправить идентификатор сеанса, либо использовать код в другой части вашего приложение для явного хранения данных в объекте Session.

person NightOwl888    schedule 22.05.2015

Я предлагаю использовать значения REMOTE_ADDR/REMOTE_HOST из коллекции ServerVariables. Они будут иметь одинаковые значения, даже если пользователь использует несколько браузеров и использует разные сеансы с одного и того же компьютера. Обратите внимание, что REMOTE_HOST не всегда может иметь значение. Ссылки: https://msdn.microsoft.com/en-us/library/system.web.httprequest.servervariables(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx

person Sridhar Voorakkara    schedule 22.05.2015
comment
Я попробовал этот метод: есть проблема, когда несколько машин подключаются через один и тот же сервис VPN, которые управляют своими IP-адресами: у них один и тот же IP-адрес. - person Aracthor; 23.05.2015