2

我们将 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)

我们也试过…… 喜欢:$Cookie.Expires = DateTime.Now.AddMinutes(10)aso

cookie 的读取方式如下:

$Cookies = $Request.Cookies["PoSHSessionID"];

Cookie Expires (Lifetime) 不会改变。它总是:会话的终生结束。

4

1 回答 1

0

我可以让它根据设置到Expires属性的日期设置发送值,但它在 http 标头中将其发送为“max-age”而不是“expires”,看起来(来自快速互联网search) 至少不支持较低版本的 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 值字符串,就像您正在做的那样,只需将 Set-Cookie 标头与 cookie 的 ToString() 一起添加,并手动附加 expires值(确保它们用分号分隔)。

这确实感觉非常像一个丑陋的解决方法,根本没有必要。我可能遗漏了一些东西,但在我的虚拟测试机(Win7、PowerShell 2.0、.NET 4.0、IE10、FF26)上,我无法让它发送 Expires 而不是 Max-Age。

您可以在Wikipedia 页面上有关 HTTP cookie 的标题 'Expires and Max-Age' 下找到过期日期格式的描述。

于 2014-01-12T01:48:56.477 回答