I have a page that using Microsoft ReportViewer and it works fine on the server. But I kept getting “ASP.NET session has expired” error message when running on my local machine. It used to work flawlessly. Further debugging reveals that the Session.SessionID keeps changing in between requests. Google search results suggest initializing session variable, increase sessionState timeout, set cookieless=false, etc… They all seems to be legitimate answers but didn't contribute to the solution. In my case, I noticed that setting the requireSSL from true to false solve the issue. If you happen to come into this error in the future, first check your web.config.
<httpCookies httpOnlyCookies="false" requireSSL="false"/>