7

I have two identical applications setup on IIS on different virtual directories (I have done some workaround to ensure that they both have the same application name). Is there a way to share session id across two asp.net web applications?

Since I'm storing the session in StateServer, they should both be getting the same session data, however, a different session id is created everytime I go from application a to applicatino b. Wouldn't this happen in a load balancing scenario as well? Where when I go to www.test.com, it would redirect that request to server a, and then if I hit it again, it would go to server b, but since it's a different web application, it would create a new session id?

3
  • Just throw it in a database. You're bending over backwards to accommodate limitations of the session. Commented Jul 9, 2010 at 19:55
  • The database would have the same issue unless I apply a workaround. Since it's two different applications in the DB, it would have 2 separate sessions. Commented Jul 9, 2010 at 21:38
  • You misunderstand my suggestion. Instead of using the session at all,place whatever persistent data you require in a common database. Sessions, and cookies, are engineered to keep applications from stepping on each other, which requires isolation. This is one of the many things that databases are good for. Commented Jul 10, 2010 at 5:59

3 Answers 3

7

First, configure the sessionState element in your web.config to use cookieName="SOME_COOKIE_NAME_HERE" in both apps.

Then, just make sure the urls have the same TLD (top-level domain), i.e. app1.mydomain.com and app2.mydomain.com and you should be able to handle the Session_Start event in Global.asax and put this code:

 HttpCookie cookie = new HttpCookie("SOME_COOKIE_NAME_HERE", Session.SessionID.ToString()); cookie.Expires = DateTime.Now.AddMinutes(20); cookie.Domain = "*.mydomain.com"; cookie.HttpOnly = true; Response.SetCookie(cookie); 

Also, I would recommend that you go with the SqlServer SessionState Mode.

Sign up to request clarification or add additional context in comments.

4 Comments

Interesting. After applying this change, I get a new session id per request. Here's my Global.asax code: void Session_Start(object sender, EventArgs e) { HttpCookie cookie = new HttpCookie("SessionCookie", Session.SessionID.ToString()); cookie.Expires = DateTime.Now.AddMinutes(20); cookie.Domain = "*.keivantest.com"; cookie.HttpOnly = true; Response.SetCookie(cookie); } Here's my web.config configuration: <sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" cookieless="false" cookieName="SessionCookie" timeout="20"/>
Also, after that cookie name is set in Application A, the next time I go to Application B, its session_start fires and overrides "SessionCookie" with its own session id
Hmm.. i wouldn't expect the Session_Start to fire in Application B. I suggest watching the traffic (fiddler, et al) to make sure that you are sending the cookie from App A over to App B. i notice your state server is localhost - are both machines reaching THE SAME state server?
Change the domain from *.domain.com to domain.com and it started working.
1

Initially i faced the same issue. What I did is, I overide the jsession id from each domain. I mean, If the user lands on domain1.com, set the same session id for domain2.com from iframe. and vice versa. With this, you can maintain same session across multiple domains.

You need to test the impact over multiple server over network with load balancer.

Comments

-1

Is your goal to share the session state between 2 applications, not just the session ID? I believe the StateServer also uses the application path as well as the SessionID to store the data so even if the SessionID's were the same you still wouldn't be able to share the data. You might have to write your own session module.

Load balancing web apps don't have this problem because the application path is the same across cluster members.

2 Comments

You are correct. I'm using an httpmodule to set the same application name for both applications to the same value.
He said he went to the trouble of getting the application name the same

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.