Если вы используете состояние сеанса InProc по умолчанию, оно сохраняется только в оперативной памяти, поэтому оно может исчезнуть не только по истечении времени ожидания сеанса, но и при перезапуске AppPool, что может произойти по ряду причин (простоя) тайм-ауты, один раз в день, чрезмерное использование памяти и т. д.). Кроме того, состояние сеанса блокируется каждой страницей, поэтому, если ваше приложение пытается сделать несколько обращений одновременно, вы можете столкнуться с проблемами.
Насколько велик ваш пользовательский объект? Если он не слишком велик, вы можете хранить данные в cookie, а не в состоянии сеанса. Silverlight изолированное хранилище является еще одним вариантом. В противном случае вы можете сохранить его в БД и самостоятельно управлять кешем. Это может быть намного эффективнее, чем использование словаря Session ....
Я должен добавить, что если вы можете использовать встроенный членский провайдер, это действительно упрощает некоторые из этих вещей, но я предполагаю, что у вас есть причины не идти по этому пути - это определенно не единый размер. универсальное решение типа.