views:

298

answers:

3

By default, ASP.NET will set its cookies to use "mydomain.com" as their base. I'd prefer to have them use "www.mydomain.com" instead, so that I can have other "sub.mydomain.com" subdomains that are cookie-free.

I've done some digging into the Session and Cookie objects, and while I can find how to set the domain for a single cookie, I don't see a way to set it for all Session cookies.

Anybody ideas?

+1  A: 

Session uses only one cookie, so why don't you set domain only for ASP.NET_SessionId cookie ?

Yossarian
5, actually, if you include the _utm... ones. All of those get sent across for every image request to cdn.mysite.com. It would be nice if I didn't need to go out and register mysitecdn.com just to avoid that.
Jason Kester
Registering a "cookieless domain" is not so uncommon: [SO did this for example](http://sstatic.net/).
scherand
+2  A: 

Create a ISessionIDManager, since you only want to change the cookie domain we will let the default one do all the work.

This is configured in web.config on the sessionState element.

<sessionState sessionIDManagerType="MySessionIDManager" />

And the implementation.

public class MySessionIDManager: SessionIDManager, ISessionIDManager
{   
    void ISessionIDManager.SaveSessionID( HttpContext context, string id, out bool redirected, out bool cookieAdded )
    {
        base.SaveSessionID( context, id, out redirected, out cookieAdded );

        if (cookieAdded) {
            var name = "ASP.NET_SessionId";
            var cookie = context.Response.Cookies[ name ];
            cookie.Domain = "example.com";
        }
    }
}
Lachlan Roche
looks really great, but it did not worked for me. THis code was able to maintain same sessionid for all subdomains, but data of sessions wasn't read successfully.
Sergey Osypchuk
A: 

I realise this is an old question, but could you use the domain attribute of the httpCookies configuration section instead of doing this in code?

OJ