I had to update an old ASP+COM application for a customer when they went from Windows 2003 to 2008R2. The process, while not 100% painless, was sucessful but one problem remains: the application seems to randomly lose the session state or, at least, the session variable where I save the session’s COM object.
Basically, the app works like this:
Login form page -> login page (object is created there and saved in Session(“MyObject”), user credentials are checked -> First actual application page (Session(“MyObject”) is checked at the top of the code).
The Second redirect only happens if the credentials are correct but the object is always created.
However, users are reporting that they are frequently being redirected to the logon form page after entering their credentials.
After some investigation, it seems that the application properly goes through the login page, creates and instance of the COM object and redirect to the first application page. And there, the session variable is empty again and so the user is sent back to the login form.
What’s more is that it is by far not systematic: the problem happens rather frequently but definitely not all the time. When it starts, users have to log on 2 or 3 times before they can get through. If the application is recycled, it usually solves the issue for some times although this isn’t systematic and this isn’t even always necessary.
Anyone has any idea what could be going on here ?
Edit: some extra info:
- ASP session handling is active
- In no part of the code are errors being silently suppressed. They will go to a log file if they happen somewhere the COM object can catch them or the user otherwise.
- No error can be seen in the COM object log file, in the IIS log or in the server’s event log.
- Tracing the process activity with ProcMon didn’t turn up anything special.
- Looking at the COM object log file, I clearly see the COM object instance being created, the “LoginUser” method being called from the login page and returning successfully and then the first application page being called and the check for the existence of the object stored in the session failing.
- There is a single web server, no server farm.
I did have an asp website that did exactly the same thing in the past. You need to check the log files and see if this application or website is running on it’s own dedicated application pool and that the application pool is not being auto recycled due to bad code. If the session is being created then dropped, then pass the initital session value to another session – say Session(“MyObject2”) and check for that in the main page. If the users are still getting logged off then I am sure that the application pool is being recycled due to too many failures such as a redirect infinite loop or something else.
Edit: One more thing. I used to see such errors a lot when using ASP with MS Access and could never figure that out.