2010-02-24 4 views
17

По умолчанию ASP.NET будет устанавливать свои файлы cookie для использования «mydomain.com» в качестве базы. Я предпочел бы, чтобы они использовали «www.mydomain.com» вместо этого, чтобы у меня были другие поддомены «sub.mydomain.com», которые не содержат файлов cookie.ASP.NET Session Cookies - указание базового домена

Я сделал некоторые копания в объектах Session и Cookie, и пока я могу найти, как установить домен для одного файла cookie, я не вижу способа установить его для всех файлов cookie сеансов.

Кто-нибудь идеи?

+0

Это полная противоположность моему опыту. Создаются новые файлы cookie для каждого из моих поддоменов. Возможно, это изменилось с более новой версией ASP.NET? Я использую .NET 4. –

ответ

19

Создайте ISessionIDManager, так как вы хотите изменить домен cookie, мы по умолчанию будем делать всю работу.

Это настроено в файле web.config на элементе sessionState под <system.web>.

<sessionState sessionIDManagerType="MySessionIDManager" /> 

И реализация.

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"; 
     } 
    } 
} 
+1

выглядит действительно здорово, но это не сработало для меня. Этот код смог поддерживать тот же sessionid для всех поддоменов, но данные сеансов не были успешно прочитаны. – st78

+0

Работал отлично для меня! Благодарю. – spoulson

+0

Разве вы не должны обрабатывать 'GetSessionId()' и 'RemoveSessionId()' ??? – user2173353

1

Сессия использует только один файл cookie, так почему бы вам не установить домен только для ASP.NET_SessionId cookie?

+0

5, на самом деле, если вы включаете _utm ... ones. Все они отправляются для каждого запроса изображения на cdn.mysite.com. Было бы неплохо, если бы мне не нужно было выходить и регистрировать mysitecdn.com, чтобы этого избежать. –

+0

Регистрация «cookieless domain» не так уж необычна: [SO сделал это, например] (http://sstatic.net/). – scherand

9

Я понимаю, что это старый вопрос, но вы могли бы использовать атрибут секции httpCookies конфигурации domain а не делать это в коде?

<httpCookies domain="String" 
      httpOnlyCookies="true|false" 
      requireSSL="true|false" /> 
+1

, похоже, не влияет на сессионный файл cookie – Tarnschaf

+0

Ах, справедливо, справедливо :) Спасибо. –

+0

+1 Это сработало для меня! Это повлияло как на сессионные, так и на файлы cookie. – jkoreska