Как проверить, включены ли в браузере файлы cookie в веб-приложении? - PullRequest
5 голосов
/ 06 марта 2012

Я решил переписать вопрос, поскольку нашел некоторую информацию о том, как выполнить вышеупомянутое: http://msdn.microsoft.com/en-us/library/aa289495%28v=vs.71%29.aspx

Однако моя проблема в том, что я пытаюсь сделать все это на событии Page_Load Login.aspx.cs.

Изначально все работает нормально, пока я не попытаюсь войти, введя свои учетные данные и нажав кнопку «Вход». Тогда все разрывы ада проигрывают, и я получаю бесконечный цикл. Он продолжает идти вперед и назад между Page_Loads на Login.aspx.cs и TestForCookies.aspx.cs. Каждый раз, когда URL перенаправления увеличивается на один "?AcceptCookies=1 ". Есть ли способ обойти это?

Код Login.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        if (Request.QueryString["AcceptsCookies"] == null)
        {
            Response.Cookies["TestCookie"].Value = "ok";
            Response.Cookies["TestCookie"].Expires = DateTime.Now.AddMinutes(1);
            Response.Redirect(BasePage.ResolveUrl("~/Common/TestForCookies.aspx?redirect=" + Server.UrlEncode(Request.Url.ToString())));
        }
        else
        {
            LoginBox.InstructionText = "Accept cookies = " + Request.QueryString["AcceptsCookies"];
        }
    }

}

TestForCookies.aspx.cs код:

protected void Page_Load(object sender, EventArgs e)
{
    string redirect = Request.QueryString["redirect"];

    string acceptsCookies = null;
    // Was the cookie accepted?
    if (Request.Cookies["TestCookie"] == null)
    {
        // No cookie, so it must not have been accepted
        acceptsCookies = "0";
    }
    else
    {
        acceptsCookies = "1";
        // Delete test cookie
        Response.Cookies["TestCookie"].Expires = DateTime.Now.AddDays(-1);
    }

    string url = redirect + "?AcceptsCookies=" + acceptsCookies;


    Response.Redirect(url);
}

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Это может быть волосатым.То, что я сделал на своей странице входа в систему, в основном состоит из следующих шагов:

  1. При нажатии кнопки «Войти» после отправки на сервер проверьте учетные данные пользователя.Если вход был успешным ...
  2. Установите мой файл cookie и отправьте JS, чтобы щелкнуть скрытую кнопку подтверждения файлов cookie в браузере.Это дополнительная передача туда и обратно, но cookie должны быть частью полезной нагрузки в обоих направлениях.
  3. Вернитесь на сервер в обработчике для кнопки «Подтвердить cookie», которую я проверяю на наличие cookie.если это там, мы хорошо, и я перенаправить.Если нет, то я отправляю контент обратно, говоря, что куки отключены, со ссылкой на то, как их включить.

Надеюсь, это поможет!

0 голосов
/ 12 марта 2012

Я думаю, что решил это. Перенаправление не было выполнено должным образом из-за неверно сформированных URL-адресов.

Login.aspx.cs

    if (!Page.IsPostBack)
    {
        if (Request.QueryString["AcceptsCookies"] != null)
        {
            if (Request.QueryString["AcceptsCookies"].ToString() == "0")
            {
                LoginBox.InstructionText = Resources.Resource.Login10;
            }
        }
        else
        {
            Response.Cookies["TestCookie"].Value = "ok";
            Response.Cookies["TestCookie"].Expires = DateTime.Now.AddMinutes(1);

            string url = Request.Url.ToString();
            url = url.Replace("ReturnUrl", "AcceptsCookies=&ReturnUrl");

            Response.Redirect(BasePage.ResolveUrl("~/Common/TestForCookies.aspx?redirect=" + Server.UrlEncode(url)));
        }

    }

TestForCookies.aspx.cs

    string redirect = Request.QueryString["redirect"];

    string acceptsCookies = null;
    // Was the cookie accepted?
    if (Request.Cookies["TestCookie"] == null)
    {
        // No cookie, so it must not have been accepted
        acceptsCookies = "0";
    }
    else
    {
        acceptsCookies = "1";
        // Delete test cookie
        Response.Cookies["TestCookie"].Expires = DateTime.Now.AddDays(-1);
    }

    redirect = redirect.Replace("AcceptsCookies=", "AcceptsCookies=" + acceptsCookies);

    Response.Redirect(BasePage.ResolveUrl(redirect), true);
}
...