Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 此Cookie检查器是否能够可靠地检测用户是否接受Cookie?_C#_Asp.net_Cookies - Fatal编程技术网

C# 此Cookie检查器是否能够可靠地检测用户是否接受Cookie?

C# 此Cookie检查器是否能够可靠地检测用户是否接受Cookie?,c#,asp.net,cookies,C#,Asp.net,Cookies,我希望我的页面在用户身上设置cookies,以便跟踪他们何时返回以及是否返回,并将其唯一的访客id保存在数据库中。我想避免为不接受cookie的用户(比如机器人和爬虫)创建cookie记录,所以我需要一种方法来检查他们是否接受cookie。我设计了以下代码 private bool CookiesAreEnabled() { bool result = false; HttpCookie CookieChecker = new HttpCookie("CookieChecker

我希望我的页面在用户身上设置cookies,以便跟踪他们何时返回以及是否返回,并将其唯一的访客id保存在数据库中。我想避免为不接受cookie的用户(比如机器人和爬虫)创建cookie记录,所以我需要一种方法来检查他们是否接受cookie。我设计了以下代码

private bool CookiesAreEnabled()
{
    bool result = false;

    HttpCookie CookieChecker = new HttpCookie("CookieChecker");
    CookieChecker.Value = "Do you see me?";
    CookieChecker.Expires = DateTime.Now.AddSeconds(10.0d);
    Response.Cookies.Set(CookieChecker);

    CookieChecker = new HttpCookie("CookieChecker");
    CookieChecker = Request.Cookies["CookieChecker"];
    if (CookieChecker != null)
    {
        result = true;
        CookieChecker = new HttpCookie("CookieChecker");
        CookieChecker.Value = "";
        CookieChecker.Expires = DateTime.Now;
        Response.Cookies.Set(CookieChecker);
    }

    return result;
}

在我看来,这应该可以检测到cookies被禁用,但事实并非如此!在我目前使用关闭cookies的Firefox进行的测试中,代码报告cookies已启用!在检测是否启用了cookies时,我是不是找错了方向?还是我犯了一个新手风格的错误?

不确定这个代码是否正确,但是
Response.Cookies.Set(CookieChecker)将在浏览器尚未接收和处理的响应上设置。当您在调用
Request.Cookies[“CookieChecker”]后立即调用时这将检查您正在处理的当前请求-浏览器甚至在收到Set Cookie请求之前生成的请求


您至少需要让浏览器处理响应,然后检查下一个请求以查看cookie是否存在。

如果要使用该方法,唯一的方法是使用2请求:第一次设置cookie,第二次读取cookie。您不能仅通过一个请求完成此操作

否则,我认为您可以使用javascript实现它(这是一个伪代码):


您不能以这种方式仅使用一个cookie来检查cookieHttpRequest@glammin,那么我该怎么做呢?我写了我该怎么做呢?那么,我该如何让浏览器处理响应呢?我是否必须尝试设置cookie,然后转移到另一个页面并在那里进行检查?右键设置cookie并让浏览器请求另一个页面,例如,通过发出302重定向到另一个页面。在该页面中,查看cookie是否到达(确保相应地处理cookie路径)。
/*first you check if there is already a cookie with the identifier*/
if(document.cookie.indexOf('cookiewithuniqueidentifier') == -1) {   
    document.cookie = 'testcookie';
    cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;
    if (cookieEnabled) { 
        /*ajax request to the server for requesting an unique identifier*/
        /*save a cookie with that identifier*/
        document.cookie='cookiewithuniqueidentifier=936DA01F-9ABD-4d9d-80C7-02AF85C822A8'
    }
}