我有一个脚本可以读取表单并将一些信息放入cookie中:
Dim oCookie as HttpCookie
oCookie = New HttpCookie("authInfo")
Select Case oResult
Case "No ClientID", "No Password", "No PracType", "No Encrypt", "CRC Mismatch"
oCookie.Values.Add("LoggedIn", "False")
oCookie.Values.Add("OnSupport", "False")
Case "Client Can Update"
oCookie.Values.Add("LoggedIn", "True")
oCookie.Values.Add("OnSupport", "True")
Case "Client Cannot Update"
oCookie.Values.Add("LoggedIn", "True")
oCookie.Values.Add("OnSupport", "False")
End Select
oCookie.Expires = DateTime.Now.AddHours(2)
HttpContext.Current.Response.Cookies.Add(oCookie)
HttpContext.Current.Response.Redirect("default.aspx")
在重定向之前正确设置了时间,但是当我尝试以这种方式打印出该值时(我也尝试了Dim oCol as HttpCookieCollection = Request.Cookies
,但我得到了相同的结果):
Response.Output.WriteLine(Request.Cookies("authInfo").Expires.ToString)
时间总是重置"01/01/0001 12:00:00 AM"
。我错过了阻止cookie保持其Expires
值的内容吗?
答案 0 :(得分:11)
Request.Cookies和Response.Cookies和常见cookie对象的使用构成了一个直观的习语,但事实上,Request cookie和Response cooke是完全不同的。
在响应中分配Cookie时,Set-Cookie标头会添加到输出中,并且不仅包含值,还包含路径和expiries值。
然而,当浏览器在另一个请求中将cookie发送回服务器时,它只包含cookie名称和值。它不会发送路径或过期信息。
因此,在使用Request.Cookies集合时,这些属性毫无意义。
答案 1 :(得分:5)
我知道这是一个老线程,可能@Anders从这里开始转向更大更好的事情。尽管如此,在尝试在我当前的HttpContext中保留Office 365身份验证cookie时遇到同样的问题时,我偶然发现了这一点。可以说,@AnthonyWJones的回答澄清了我对cookie的很多直觉。对于像我这样必须遇到这个问题的人,尽管交换的信息无法确定维持cookie到期日期的回旋处。 这是我最终尝试的: 1.在将cookie(其有效期限到期)添加到HttpResponse之前,我将其到期日期和域保留在我的数据库中。 2.然后可以将cookie添加到响应中,其基本属性保持不变,例如“名称”和“值”。 3.从请求中检索到cookie后,我构建了一个新的cookie,其中包含从DB和其余属性中获取的域和到期日期。 然后我就可以使用这些cookie来启动对目标站点的进一步请求。
答案 2 :(得分:0)
当初始请求来自不同的域时,我遇到了这样的问题 确保您还添加了Cookie的域名。
答案 3 :(得分:0)
如果要检查到期日期,可以将其添加到cookie值集合中。然后检索它并进行检查。