Cookies сессии ASP.NET - указание базового домена

17

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

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

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

    
задан Jason Kester 24.02.2010 в 15:06
источник
  • Это полная противоположность моему опыту. Создаются новые файлы cookie для каждого из моих поддоменов. Возможно, это изменилось с более новой версией ASP.NET? Я использую .NET 4. –  Doug S 01.12.2013 в 06:47

3 ответа

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";
        }
    }
}
    
ответ дан Lachlan Roche 24.02.2010 в 15:43
источник
  • выглядит действительно здорово, но это не сработало для меня. Этот код смог поддерживать тот же sessionid для всех поддоменов, но данные сеансов не были успешно прочитаны. –  st78 06.04.2010 в 15:49
  • Отлично работает для меня! Благодарю. –  spoulson 10.09.2015 в 15:56
  • Разве вы не должны обрабатывать GetSessionId () и RemoveSessionId () ??? –  user2173353 16.12.2016 в 10:02
  • ОК. Глядя на код SessionIDManager, кажется, что это не нужно. :) –  user2173353 16.12.2016 в 10:49
10

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

<httpCookies domain="String" 
             httpOnlyCookies="true|false" 
             requireSSL="true|false" />
    
ответ дан OJ. 23.09.2010 в 02:34
источник
  • , похоже, не влияет на сеанс cookie –  Tarnschaf 19.07.2011 в 01:24
  • Ах, правда, справедливо :) Спасибо. –  OJ. 19.07.2011 в 07:54
  • +1 Это сработало для меня! Это повлияло как на сессионные, так и на файлы cookie. –  jkoreska 09.11.2011 в 17:48
  • Протестировано в .Net 4, 4.5, 4.6.1 - работал для меня гораздо проще, чем принятый ответ. –  Zachary Yates 15.01.2016 в 21:25
  • Работает для меня :) –  Ghasan Al-Sakkaf 04.04.2017 в 06:09
1

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

    
ответ дан nothrow 24.02.2010 в 15:10
источник
  • 5, на самом деле, если вы включаете _utm ... ones. Все они отправляются для каждого запроса изображения на cdn.mysite.com. Было бы неплохо, если бы мне не нужно было выходить и регистрировать mysitecdn.com, чтобы этого избежать. –  Jason Kester 24.02.2010 в 15:39
  • Регистрация «cookieless domain» не так уж необычна: SO сделала это, например. –  scherand 14.06.2010 в 14:57