Этот фрагмент кода .NET на самом деле НЕ создаст куки, верно? - PullRequest
1 голос
/ 04 мая 2010

Я только что понял, что этот файл cookie не отображается должным образом, и я проверил код, который был написан не мной, но я уверен, что этого недостаточно для создания файла cookie. ??

public static void CreateSSOCookies(string tokenID)
            {
                System.Web.HttpContext.Current.Response.Cookies["ssocookies"].Domain = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"].ToString().ToLower();
                System.Web.HttpContext.Current.Response.Cookies["ssocookies"].Value = tokenID.ToString();
                System.Web.HttpContext.Current.Response.Cookies["ssocookies"].Path = "~/";
                System.Web.HttpContext.Current.Response.Cookies["ssocookies"].Expires = DateTime.Now.AddDays(7);
            }

Если это работает, то где же тогда cookie? Название печенья 'ssocookies'?

Ответы [ 4 ]

4 голосов
/ 04 мая 2010

Должен признать, что я не знал, но, очевидно, создает cookie. Я проверил, все работает.

См. http://msdn.microsoft.com/en-us/library/78c837bd.aspx

До сих пор я всегда использовал метод new HttpCookie(), который мне кажется намного более похожим на .NET, чем коллекция, волшебным образом добавляющая cookie с правильным именем в первой ссылке. Я бы по-прежнему рекомендовал быть более откровенным о создании cookie, особенно если посмотреть некоторые неправильные ответы здесь:)

Edit: Путь "~ /" действительно, вероятно, не то, что вы хотите. Используйте

// Removed some of the current context stuff for readability
Response.Cookies["ssocookies"].Path = VirtualPathUtility.ToAbsolute("~");

вместо этого.

3 голосов
/ 04 мая 2010

Я думаю, что Дэвид, комментируя вопрос, является правильным, но более подробно его комментарий:

Бит "~ /" специфичен для ASP.NET и не разрешает ожидаемый путь. Таким образом, файл cookie фактически создается, но поскольку вы устанавливаете путь к чему-то недопустимому, он не возвращается вам.

Например, если вы установите путь к «/ foo», cookie будет возвращаться только при запросе к пути /foo в вашем приложении.

Поскольку в вашем приложении нет абсолютного пути, равного литералу ~/, файл cookie возвращаться не будет.

2 голосов
/ 04 мая 2010

Создает cookie. Глядя в отражатель, ваш код выше называет это:

public HttpCookie this[string name]
{
    get
    {
            return this.Get(name);
    }
}

, который в свою очередь вызывает:

public HttpCookie Get(string name)
{
    HttpCookie cookie = (HttpCookie) base.BaseGet(name);
    if ((cookie == null) && (this._response != null))
    {
        cookie = new HttpCookie(name);
        this.AddCookie(cookie, true);
        this._response.OnCookieAdd(cookie);
    }
    return cookie;
}

И вы можете видеть, что он действительно создает cookie. Если вы не видите, что это возвращается в запросе, я думаю, что это связано с вашим путем. Я не уверен, что "~ /" является действительным.

0 голосов
/ 04 мая 2010
HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie["Font"] = "Arial";
myCookie["Color"] = "Blue";
myCookie.Expires = DateTime.Now.AddDays(1d);
Response.Cookies.Add(myCookie); //<<<<<<<<<-------------------

http://msdn.microsoft.com/en-us/library/78c837bd(v=VS.80).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...