Пользователь Членства Доступа В Конце Сеанса


В настоящее время я пытаюсь написать немного кода, чтобы сделать некоторую уборку, когда пользователь покидает свою сессию (либо через тайм-аут, либо выход из системы), однако хотел бы получить доступ к объекту пользователя, чтобы я знал, кому принадлежит сессия.

К сожалению HttpContext имеет значение null, поэтому я не могу получить доступ к HttpContext.Пользователь или HttpContext.Пользователь.IsInRole или даже печенье auth напрямую. Я понимаю причины этого, но интересно, есть ли какой-либо другой способ получить доступ к этой информации когда истекает время сеанса?

Это помимо очевидного ответа на дублирование некоторой информации в сеансе.

Спасибо.

2 3

2 ответа:

Вы можете использовать Global.событие asax s Session_End. Событие Session_End вызывается автоматически по истечении срока действия сеанса.

Проблема в том, что событие Session_End вызывается без текущего запроса. В результате, HttpContext.Current является нулем внутри Session_End.

Если вы хотите получить информацию о пользователе, вам нужно будет сохранить ее в сеансе, как только пользователь успешно войдет в систему.

private void Session_End(object sender, EventArgs e)
{
    // Code that runs when a session ends. 
    // Note: The Session_End event is raised only when the sessionstate mode
    // is set to InProc in the Web.config file. If session mode is set 
    // to StateServer or SQLServer, the event is not raised.

    var userName = Session["UserName"];
    var sessionId = Session.SessionID;
}

Введите описание изображения здесь

Нет ничего, что связывает пользователя членства с сеансом.

Когда пользователь вручную выходит из системы, перед тем как очистить сеанс, вы можете получить его информацию о пользователе.

Однако, если пользователь оставляет браузер открытым и время сеанса истекает на сервере, вы не будете знать, кто этот пользователь, поэтому не сможете привести его в порядок.

На сервере, возможно, потребуется отслеживать, когда пользователь в последний раз взаимодействовал, а затем запустить задание для очистки для пользователей, которые еще не взаимодействуют через некоторое время и считаются вышедшими из системы.