3

ユーザーが Cookie を有効にしているかどうかをテストしていますが、正しいことをしていないようです。

これが私のテストです:

private bool CookiesAllowed()
{
  var testCookie = new HttpCookie("TestCookie", "abcd");
  System.Web.HttpContext.Current.Response.Cookies.Set(testCookie);

  var tst = System.Web.HttpContext.Current.Request.Cookies.Get("TestCookie");
  if (tst == null || tst.Value == null)
  {
    return false;
  }
  return true;
}

私はそこにクッキーを置いています...そしてそれを取り戻します。しかし、それは常に成功します。

無効にする方法は次のとおりです。

ここに画像の説明を入力

Gmail にアクセスすると、Cookie が無効になっていると表示されるので、その部分は正しく行っていると思います。

私は何を間違っていますか?

編集

James の質問に答えるために、最初のチェックとして入力画面であるログオン画面からこれを呼び出しています。

   public ActionResult LogOn(string id)
    {
      if (!CookiesAllowed())
      {
        return View("CookiesNotEnabled");
      }

また、ローカルホストではなく、ビジュアルスタジオの外でこれをライブでテストしましたが、同じことをしました。

4

1 に答える 1

2

Cookie が返されるかどうかを確認するには、クライアント/ブラウザに新しい Request を実行させる必要があります。応答オブジェクトに Cookie を追加すると、後続の新しい要求でその存在のみを確認できます。

ASP.NET WebFormsの同じページ内でそれを行う方法を次に示します (MVC を使用していることを示す編集を見たため)。

private bool IsCookiesAllowed()
{
  string currentUrl = Request.RawUrl;

  if (Request.QueryString["cookieCheck"] == null)
  {
    try
    {
      var testCookie = new HttpCookie("SupportCookies", "true");
      testCookie.Expires = DateTime.Now.AddDays(1);
      Response.Cookies.Add(testCookie);

      if (currentUrl.IndexOf("?", StringComparison.Ordinal) > 0)
        currentUrl = currentUrl + "&cookieCheck=true";
      else
        currentUrl = currentUrl + "?cookieCheck=true";

      Response.Redirect(currentUrl);
    }
    catch
    {
    }
  }

  return Request.Cookies.Get("SupportCookies") != null;
}

このコード スニペットは、このスレッドに触発されています。

于 2012-12-27T22:45:13.377 に答える