IIS 7,应用程序和Cookie的新问题,可能是未解决且易于重现的问题。主要的一点是,如果你从一个文件夹中设置cookie,然后在同一个网站上从另一个文件夹中请求它,如果两个文件夹中的一个被设置为从IIS 7“转换为应用程序”,则cookie不是来自IIS7的SENT
重现问题的步骤:
1)使用以下代码创建“setcookie.asp”(CLASSIC ASP):
response.cookies("mycookie")="myvalue"
response.cookies("mycookie").expires=dateadd("d",3650,now())
2)使用以下代码创建“readcookie.aspx”:
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie myCookie = Request.Cookies["mycookie"];
if (myCookie!=null)
response.write(myCookie.Value);
else
response.write("NULL COOKIE");
}
3)创建一个包含两个子文件夹的新IIS 7网站:“folderone”和“foldertwo”。
4)在root上,输入“writecookie.asp”,然后在“folderone”和“foldertwo”上复制“readcookie.aspx”。
5)转到http://yourwebsite/setcookie.asp
设置Cookie - 确定 - 然后转到http://yourwebsite/folderone/readcookie.aspx
:它可以正常运行并显示Cookie内容。这也适用于http://yourwebsite/foldertwo/readcookie.aspx
现在,好玩:
在IIS 7上右键单击“foldertwo”并选择“转换为应用程序”,然后再次尝试步骤5):“folderone / readcookie.aspx”将返回正确的cookie,但“foldertwo / readcookie.aspx”将返回“NULL”!!!!!!!
如果你在IIS6上做同样的事情,那么cookie在不同的应用程序中运行良好。
有什么解决方案吗?这似乎与在应用程序之间共享“app_code”完全相同(这是不可能的:您需要在您设置的每个应用程序文件夹下复制+粘贴“app_code”文件夹)。
谢谢任何人。
答案 0 :(得分:0)
据我所知,cookie是依赖于应用程序的,即该特定站点存在cookie生命周期。
现在,当您将文件夹转换为应用程序时,它会将新应用程序和新网站转换为不同的网站,因此您无法找到相同的值。
或者,您可以通过在硬盘上查找文本文件来探索Cookie。 Internet Explorer将站点的cookie存储在名称格式为@ .txt的文件中,其中是您的帐户名称。例如,如果您的名字是mikepope并且您访问了网站www.contoso.com,则该网站的cookie将位于名为mikepope@www.contoso.txt的文件中。 (名称可能包含序号,例如mikepope@www.contoso [1] .txt。)
答案 1 :(得分:0)
由于您将文件夹转换为自己的应用程序,因此需要设置cookie路径。
Dim myCookie As HttpCookie
myCookie = New HttpCookie("LastVisit", DateTime.Now.ToString())
myCookie.Path += "; HttpOnly"
Response.AppendCookie(myCookie)