2012-03-27 2 views
0

나는 HttpWebRequest를 사용하여 웹 사이트에서 데이터를 다운로드하고 있으며 쿠키와 관련된 버그를 발견했습니다. domain.com에서 데이터를 가져오고 해당 웹 사이트가 www.domain.com으로 리디렉션되어 쿠키를 보내면 해당 쿠키는 domain.com과 공유되지 않습니다. 이것은 내 애플 리케이션에 몇 가지 불쾌한 버그가 발생합니다.domain.com과 www.domain.com간에 쿠키를 공유하는 방법은 무엇입니까?

나는 www.domain.com이 domain.com과 동일한 웹 사이트 일 필요는 없다는 것을 알고 있지만,이 경우 혜택이 관련된 위험보다 중요하다고 생각합니다.

domain.com의 쿠키를 www.domain.com과 vice versse에 자동으로 적용하는 쉬운 방법이 있습니까?

+0

은 domain.com 도메인인가? 그렇다면 하위 도메인에서도 작동하도록 쿠키를 변경할 수 있습니다. – f2lollpll

+0

아니요, 내 도메인이 아닙니다. –

답변

0

는 여기에 내가했던 일이야 :

class DomainComparer : StringComparer 
    { 
     public override int Compare(string x, string y) 
     { 
      if (x == null || y == null) 
      { 
       return StringComparer.OrdinalIgnoreCase.Compare(x, y); 
      } 
      if (x.StartsWith("www.", StringComparison.OrdinalIgnoreCase)) 
      { 
       x = x.Substring(4); 
      } 
      if (y.StartsWith("www.", StringComparison.OrdinalIgnoreCase)) 
      { 
       y = y.Substring(4); 
      } 
      return StringComparer.OrdinalIgnoreCase.Compare(x, y); 
     } 

     public override bool Equals(string x, string y) 
     { 
      return Compare(x, y) == 0; 
     } 

     public override int GetHashCode(string obj) 
     { 
      if (obj.StartsWith("www.", StringComparison.OrdinalIgnoreCase)) 
      { 
       obj = obj.Substring(4); 
      } 
      return StringComparer.OrdinalIgnoreCase.GetHashCode(obj); 
     } 
    } 

    /// <summary> 
    /// this is a hackfix for microsoft bug, where cookies are not shared between www.domain.com and domain.com 
    /// </summary> 
    /// <param name="cc"></param> 
    static void ImproveCookieContainer(CookieContainer cc) 
    { 
     Hashtable table = (Hashtable)cc.GetType().InvokeMember(
      "m_domainTable", 
      System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, 
      null, cc, new object[] { }); 
     var comparerPreperty = table.GetType().GetField("_keycomparer", 
      System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance); 
     if (comparerPreperty != null) 
     { 
      comparerPreperty.SetValue(table, new DomainComparer()); 
     } 
    } 
0

세션 개체에 쿠키 콘텐츠를 저장하고 세션 개체를 식별하는 세션 키로 새 페이지를 호출하십시오. 그런 다음 www.domain.com에 대한 페이지를 제공 할 때 세션을 검색하고 새 쿠키를 설정하십시오.

관련 문제