Aci*_*dic 44 c# asp.net cookies webforms asp.net-4.0
通过快速搜索Stack Overflow,我看到人们建议使用以下方法检查cookie是否存在:
HttpContext.Current.Response.Cookies["cookie_name"] != null
Run Code Online (Sandbox Code Playgroud)
或(在Page
课堂内):
this.Response.Cookies["cookie_name"] != null
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用索引器(或Cookies.Get方法)来检索不存在的cookie时,似乎实际上创建了一个具有该名称的"默认"cookie并返回该cookie,因此无论我使用什么cookie名称它永远不会返回null.(更糟糕的是 - 创建一个不需要的cookie)
我在这里做错了什么,或者是否有一种不同的方式来简单地通过名称检查特定cookie的存在?
mar*_*sks 50
有时您仍然需要知道Cookie是否存在于Response中.然后你可以检查cookie密钥是否存在:
HttpContext.Current.Response.Cookies.AllKeys.Contains("myCookie")
Run Code Online (Sandbox Code Playgroud)
更多信息可以在这里找到.
在我的情况下,我不得不在Global.asax中的Application_EndRequest方法中修改Response Cookie.如果Cookie不存在,我不碰它:
string name = "myCookie";
HttpContext context = ((HttpApplication)sender).Context;
HttpCookie cookie = null;
if (context.Response.Cookies.AllKeys.Contains(name))
{
cookie = context.Response.Cookies[name];
}
if (cookie != null)
{
// update response cookie
}
Run Code Online (Sandbox Code Playgroud)
Tre*_*vor 39
这里有很多正确的答案取决于你想要完成的事情; 这是我尝试提供全面的答案:
无论是Request
与Response
对象包含Cookies
的属性,它们是HttpCookieCollection
对象.
Request.Cookies:
null
值.Response.Cookies:
Request.Cookies
集合中,则会添加它(但如果该Request.Cookies
对象已包含具有相同键的cookie,即使其值已过时,也不会更新以反映更改来自Response.Cookies
集合中新创建的cookie .解决方案
如果要从客户端检查是否存在cookie,请执行以下操作之一
Request.Cookies["COOKIE_KEY"] != null
Request.Cookies.Get("COOKIE_KEY") != null
Request.Cookies.AllKeys.Contains("COOKIE_KEY")
如果要检查服务器在当前请求期间是否存在cookie,请执行以下操作:
Response.Cookies.AllKeys.Contains("COOKIE_KEY")
(见这里)尝试通过以下方法之一检查服务器在当前请求期间添加的cookie ...
Response.Cookies["COOKIE_KEY"] != null
Response.Cookies.Get("COOKIE_KEY") != null
(见这里)...将导致在Response.Cookies
集合中创建cookie,并且状态将评估为true
.
Ale*_*kov 35
你需要使用HttpContext.Current.Request.Cookies
,而不是Response.Cookies
.
附注:cookie被复制到Request on Response.Cookies.Add
,这使得对其中任何一个的检查对于新添加的cookie的行为相同.但传入的cookie永远不会反映出来Response
.
HttpResponse.Cookies属性中记录了此行为:
使用HttpResponse.Cookies集合添加cookie后,即使响应尚未发送到客户端,cookie也会立即在HttpRequest.Cookies集合中提供.
zmb*_*mbq 30
Response.Cookies
包含将发送回浏览器的cookie.如果你想知道cookie是否存在,你应该考虑一下Request.Cookies
.
无论如何,要查看cookie是否存在,您可以检查Cookies.Get(string)
.但是,如果在Response对象上使用此方法并且cookie 不存在,则将创建该cookie.
请参阅MSDN参考HttpCookieCollection.Get
方法(字符串)
归档时间: |
|
查看次数: |
98783 次 |
最近记录: |