Sure - I think that is a good idea
and 3. are related: The issue is where would you actually store this dictionary and logic.
Asp.Net application or session scope are of course the easiest choice, but there you really need to understand the logic of application pools. Asp.Net applications are recycled from time to time: when there is no action on the site for a certain period or in special situations - e.g. if the process starts to take too much memory the application is shut down and a new one is started in the next request. There are events for session and application shut-down, but at least some years ago they were not really reliable: In many special cases they did not always fire. Perhaps they are better now, but it is painful to test. And 1 hour is really a long time: Usually sessions are kept alive only like 20 minutes after last request.
Reliable way would be to have a separate Windows service (a lot of work to program) or always storing to database with double-view analyses (quite a lot of overhead for such a small feature).
Do you have access to IIS logs? How about analyzing IIS logs e.g. every 30 minutes with some kind of timer process and taking the count from there? Or then just store all the hits to the database with user info and calculate the unique hits with similar timed process.
One final question: Are you really sure none of the thousands of counter apps/services in the Internet wouldn't do the job close enough to your requirements?
Good luck!
//Olli