我们正在将PoSH服务器用于我们的Web服务。
有谁知道如何在我们的脚本中更改/设置cookie过期?这就是我们目前尝试这样做的方式:
$Response = $Context.Response
$Response.Headers.Add("Accept-Encoding","gzip");
$Response.Headers.Add("Server","PoSH Server");
$Response.Headers.Add("X-Powered-By","Microsoft PowerShell");
$Cookie = New-Object Net.Cookie
$Cookie.Name = "SessionID"
$Cookie.Value = New-TimeStamp
$Cookie.Expires = now+10
$Response.AppendCookie($Cookie)
我们也试过s.th.喜欢:$Cookie.Expires = DateTime.Now.AddMinutes(10)
a.s.o。
以下列方式阅读cookie:
$Cookies = $Request.Cookies["PoSHSessionID"];
Cookie过期(终身)不会改变。它始终是:终身会话结束。
答案 0 :(得分:0)
我能够根据设置为Expires
属性的日期设置发送值,但是它会在http标头中将其作为“max-age”而不是“expires”发送,看起来(从快速的互联网搜索)至少IE不支持低版本。
我不习惯使用System.Net.HttpListenerResponse类型(更习惯于ASP.NET中使用的System.Web命名空间)所以我很可能会遗漏一些非常明显的东西,但这是我唯一能得到的方法我想要的是手动添加Set-Cookie标头。有关如何执行此操作的示例如下:
$Context.Response.Headers.Add("Set-Cookie", "myCookieName=myCookieValue; expires=Tue, 12-Jan-2016 01:14:40 GMT")
但请注意,您的Cookie值中可能包含特殊字符,这会使您的Set-Cookie字符串无效。解决这个问题的一种可能方法是使用System.Net.Cookie类创建cookie值字符串,就像你正在做的那样,只需添加带有Cookie的ToString()的Set-Cookie标头,并手动添加过期值(确保它们用分号分隔)。
这确实非常像一个丑陋的解决方案,根本不应该是必要的。我可能遗漏了一些东西,但是在我的虚拟测试机器上(Win7,PowerShell 2.0,.NET 4.0,IE10,FF26)我无法发送它来发送Expires而不是Max-Age。
您可以在the Wikipedia page about HTTP cookies under the header 'Expires and Max-Age'找到过期日期格式的说明。