The answer was quite simple.
I tried to understand how works a mechanism for storing sessions in ASP.NET. In my case, the sessions stores in the SQL Server database SessionStateService_bf7ce9929397425d9b58d03b91699180
(default provision). This database contains two tables ASPStateTempApplications
and ASPStateTempSessions
. If you look at this tables you can see the main idea why diffirent applications has diffirent sessions.
SessionId
column consist of two parts: %SESSION_ID%
(HttpContext.Current.Session.SessionID
) and second part is the app-hash. App hash is unique for each applications, actually it is hash-function of two variables: AppId and MachineName. AppId generated by dbo.TempGetAppID
stored procedure, MachineKey is property of each web.config (or machine-level machine.config).
So all you need to fix the stored procedure and web.config. I added to the dbo.TempGetAppID
procedure this line at start:
SET @appName = 'singlesession'
Then I provided same validation and decryption keys in the <machineKey/>
config section of web.config for both zones - "http" and "https".
So I got single HttpContext.Current.Session for each web-applications.