In web apps the rule of thumb is:
On request start get a new scope, store that scope somewhere where you can get hold of it during the request, and on request end dispose the scope again. Basically on thread (request) - one scope approach.
I have implemented it for WCF in a layered architecture in this code library
It can easily be adopted to a plain web scenario. Basically you have to use some events (request start, request end) in the global.asax and call the Attach and Detach on your ContextManager.
You will need though to write a WebContextManager, but it is really simple.. Use the WcfContextManager as template (only need to override a method) and then make this available in your ContextManagerFactory as a property.
If this is too much work, Telerik also has some articles on the matter here