Mik*_*e J 5 c# cookies httplistener
我有一个HttpListener用于处理页面登录的类,并且可以成功设置cookie,但cookie在会话结束时到期(在Chrome中使用cookie扩展,显示cookie是会话cookie).这是代码片段:
CookieCollection ccol = new CookieCollection();
Cookie loginCookie = new Cookie();
loginCookie.Name = "login";
loginCookie.Value = "loggedin";
loginCookie.Expires = DateTime.Now.AddMinutes(60);
ccol.Add(loginCookie);
context.Response.Cookies = ccol;
Run Code Online (Sandbox Code Playgroud)
只要我在同一个会话中,我就可以毫无问题地访问cookie.
通常,cookie collection(Cookies)属性是只读的(至少在使用ASP.NET Response.Cookies属性时).
自从我使用它以来已经有一段时间了HttpListener,所以你知道在分配你自己的cookie集合之前Cookies集合是否为空?如果没有,您可以尝试简单地添加cookie而不是cookie集合吗?
编辑:
我使用了一个测试网络服务器HttpListener,这就是我发现的.设置cookie时,http标头如下所示:
Set-Cookie:用户名= shiv
而它应该是这样的:
Set-Cookie:username = shiv; expires =星期四,2011年1月27日00:45:41 GMT; 路径= /
那么目前它看起来像一个bug?我会深入挖掘并让你知道......
编辑2:
好的,ExpirationCookie 的时间需要设置为GMT时间.ASP.NET会为您提供此功能,但在这种情况下,您必须自己使用正确的格式.
手动设置Http Header按预期工作:
context.Response.Headers.Add("Set-Cookie",
"username=shiv; expires=Thu, 27-Jan-2011 00:45:41 GMT; path=/");
Run Code Online (Sandbox Code Playgroud)
哪里context是HttpListenerContext.
这似乎是使用the设置(非会话)cookie的唯一方法HttpListener.DateTime如果沿着我建议的路线前进,您可以使用此格式字符串正确格式化日期:
var cookieDate = DateTime.UtcNow.AddMinutes(60d).ToString("dddd, dd-MM-yyyy hh:mm:ss GMT");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2553 次 |
| 最近记录: |