Assuming your custom object is not huge and doesn't change often, I think it can be stored in a session.
Since you already have a sql server session, you will make SP calls to pull / push data already and add a small object to it should have minimal problems with punching compared to other options, such as saving it to the client and sending it to each request. I also consider the server a safer place to store this information.
You want to minimize the number of times you write per session (lock request) when it is stored in sql, because it is implemented in a private class that exclusivity blocks the session. If any of your other queries in this session require write access to the SQL session, they will be blocked by the original query until it releases the session lock. (There are several new interceptors in .NET 4 that allow you to modify the SessionStateBehavior in the pipeline before access to the session)
You can consider a session state server (appfabric) if a problem in your SQL session store is a problem.
source share