And*_*ers 3 vb.net asp.net cookies
我有一个脚本,它读取一个表单并将一些信息放入一个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")
Run Code Online (Sandbox Code Playgroud)
时间在重定向之前正确设置,但是当我尝试以这种方式打印出该值时(我也尝试了Dim oCol as HttpCookieCollection = Request.Cookies
,但我得到了相同的结果):
Response.Output.WriteLine(Request.Cookies("authInfo").Expires.ToString)
Run Code Online (Sandbox Code Playgroud)
时间总是重置"01/01/0001 12:00:00 AM"
.我错过了阻止cookie保持其Expires
价值的东西吗?
Ant*_*nes 11
Request.Cookies和Response.Cookies和使用常见的cookie对象构成了一个直观的习语,但事实上,Request cookie和Response cooke是完全不同的.
在响应中分配Cookie时,Set-Cookie标头会添加到输出中,并且不仅包含值,还包含路径和expiries值.
但是,当浏览器在另一个请求中将cookie发送回服务器时,它只包含cookie名称和值.它不发送路径或过期信息.
因此,使用Request.Cookies集合时,这些属性毫无意义.
我知道这是一个老线程,可能@Anders从这里开始转向更大更好的东西.尽管如此,在尝试在我当前的HttpContext中保留Office 365身份验证cookie时遇到同样的问题时,我偶然发现了这一点.可以说,@AnthonyWJones的回答澄清了我对cookie的很多直觉.对于像我这样必须遇到这个问题的人,尽管交换的信息无法确定维持cookie到期日期的回旋处.以下是我最终尝试的内容:1.在将cookie(其有效期限到期)添加到HttpResponse之前,我将其过期日期和域保留在我的数据库中.2.然后可以将cookie添加到响应中,其基本属性保持不变,例如"名称"和"值".3.从请求中检索到cookie后,我构建了一个新的cookie,其中包含从DB和其余属性获取的域和到期日期.然后我就可以使用这些cookie来启动对目标站点的进一步请求.
归档时间: |
|
查看次数: |
8829 次 |
最近记录: |