Предполагая, что ваш пользовательский объект не очень большой и часто не меняется, я думаю, что его можно хранить в сеансе.
Поскольку у вас уже есть сеанс сервера sql, вы будете делать вызовы SP, чтобы уже извлекать / выгружать данные, и добавление небольшого объекта к нему должно иметь минимальные проблемы с производительностью по сравнению с другими вариантами, такими как сохранение его на клиенте и отправка его на каждом запрос.
Я также считаю сервер более безопасным местом для хранения этой информации.
Вы хотите минимизировать количество раз, когда вы записываете в сеанс (запрашиваете блокировку), когда он хранится в sql, поскольку он реализован в запечатанном классе, эксклюзивность которого блокирует сеанс. Если для любых других ваших запросов в этом сеансе требуется доступ на запись в сеанс SQL, они будут заблокированы начальным запросом до тех пор, пока он не снимет блокировку сеанса. (в .NET 4 есть несколько новых хуков, позволяющих вам изменять SessionStateBehavior в конвейере до доступа к сеансу)
Вы можете рассмотреть сервер состояния сеанса (appfabric), если проблема с хранилищем сеансов SQL является проблемой.