我很惊讶我找不到任何答案.
如何将我的cookie中的sessionid设置为在会话结束时到期?(当浏览器关闭或用户在一段时间内处于非活动状态时).
我找到的两个解决方案是
(httpcookie).Expires = HttpContext.Current.Session.Timeout
Run Code Online (Sandbox Code Playgroud)
这给了我一个编译错误,所以我不知道用户是否在发布之前检查了他的代码.另一个是将过期日期设置为1天前,我的直觉说错了.我该怎么做呢?
Not*_*tMe 51
你在谈论一个非持久性cookie.默认情况下,asp.net以这种方式发送cookie.它们之间的主要区别在于持久性cookie具有过期值集.
因此,如果您不希望cookie保持不变,则不要设置expires值.
也就是说,cookie将保留在内存中,直到浏览器实际关闭.假设他们浏览到您的网站并设置了非持久性cookie.他们做事并浏览.之后,他们使用相同的浏览器实例返回您的网站.cookie仍然存在.
现在,如果他们在任何时候关闭浏览器,那么cookie将被刷新.
点是,不要设置expires头.特别是当会话日期到期时.会话日期通常在将来只有20分钟左右,但是当用户浏览您的网站时,到期日期会向前滚动.
=====更新=====
我使用以下代码进行测试:
protected void Page_Load(object sender, EventArgs e) {
if (!Page.IsPostBack) {
HttpCookie c = Request.Cookies["test"];
if (c != null) {
Response.Write(String.Format("test value is {0} <br />", c.Value));
}
} else {
HttpCookie c = new HttpCookie("test");
c.Value = "HERE IT IS";
Response.Cookies.Add(c);
}
}
protected void Button1_Click(object sender, EventArgs e) {
Response.Write("clicked<br />");
}
Run Code Online (Sandbox Code Playgroud)
简单的.aspx文件有一个按钮,它触发了button1_click处理程序.当我最初使用任何最新的浏览器(即firefox,chrome)浏览它时,没有cookie.点击按钮后,设置了一个cookie.然后我完全关闭浏览器,重新打开并浏览回网站.在所有情况下,cookie都消失了.
重要的是要注意,现在当用户关闭浏览器时,您不能指望删除会话cookie.Chrome和Firefox都在2012年左右做出了改变 - 请参阅此答案中的各种链接.
现在,如果没有删除会话cookie,我会发现这是一个可怕的,可怕的,没有好的,非常糟糕的安全漏洞,更不用说违反了所有相关的RFC,但显然我们的Google(和Mozilla)Overlords知道的更好.
我不确定最好的解决方法是什么,但我采取的方法是在每次调用后将cookie上的"Expires"属性重置为将来的一小时.这并不是理想的行为,但我认为这比允许关键的cookie基本上永远存在更好.
对其他建议或澄清持开放态度.
TimeOut
返回一个int
,Expires
期望DateTime
,这就是该代码无法编译的原因。将过期日期设置为过去的日期会立即撤销 cookie,因此这可能不是您想要的。如果您未设置过期日期,则一旦用户关闭浏览器,cookie 就会过期。
如果您希望将 cookie 绑定到特定会话,为什么首先要涉及 cookie?每次用户使用您的应用程序延长会话时,您当然可以继续延长 cookie 的到期日期,但这似乎是不必要的工作。只需使用会话即可。
请随意详细说明问题。
归档时间: |
|
查看次数: |
67183 次 |
最近记录: |