Я бы использовал хорошую библиотеку журналов (Enterprise Library или Log4Net) и написал бы код журналирования в обработчиках событий Session_Start и Session_End в Global.asax.
Имейте в виду, однако, что если вы используете SqlServerSessionState, событие Session_End не срабатывает.
Редактировать: На самом деле, если вам нужно зарегистрировать имя пользователя, может оказаться более целесообразным зарегистрировать начало сеанса из Application_AuthenticateRequest, где будет установлена идентичность. Это не будет строго начало сеанса, но дело в том, что если вы не используете встроенную безопасность Windows, то при создании сеанса личность пользователя не будет установлена.