0

IIS 7、应用程序和 cookie 为您解决了一个新的、可能未解决且易于重现的问题。要点是,如果您从一个文件夹设置 cookie,然后从另一个文件夹请求它,显然在同一网站上,如果两个文件夹之一已从 IIS 7 设置为“转换为应用程序”,则不会从 IIS7 发送 cookie .

重现问题的步骤:

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) 在根目录下,放入“writecookie.asp”,然后将“readcookie.aspx”复制到“folderone”和“foldertwo”。

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”文件夹)。

谢谢任何人。

4

2 回答 2

0

据我所知,cookie 依赖于应用程序,即该特定站点存在 cookie 生命周期。

现在,当您将文件夹转换为应用程序时,它是一个新应用程序和一个新网站,因此它不会被视为同一个网站,这就是您无法找到相同值的原因。

或者,您可以通过在硬盘上找到它们的文本文件来探索 cookie。Internet Explorer 将站点的 cookie 存储在名称格式为 @.txt 的文件中,其中是您的帐户名称。例如,如果您的名字是 mikepope,并且您访问站点 www.contoso.com,则该站点的 cookie 将位于名为 mikepope@www.contoso.txt 的文件中。(名称可能包含一个序列号,例如 mikepope@www.contoso[1].txt。)

于 2013-07-25T09:52:20.627 回答
0

由于您将文件夹转换为自己的应用程序,因此您需要设置 cookie 路径。

    Dim myCookie As HttpCookie
myCookie = New HttpCookie("LastVisit", DateTime.Now.ToString())
myCookie.Path += "; HttpOnly"
Response.AppendCookie(myCookie)
于 2013-09-03T04:39:08.810 回答