C# 此Cookie检查器是否能够可靠地检测用户是否接受Cookie?
我希望我的页面在用户身上设置cookies,以便跟踪他们何时返回以及是否返回,并将其唯一的访客id保存在数据库中。我想避免为不接受cookie的用户(比如机器人和爬虫)创建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
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'
}
}