HttpCookie.Path和映射的URL

时间:2015-01-08 05:24:56

标签: c# asp.net cookies url-routing relative-path

根据官方文档页面HttpCookie.Path

  

Path属性扩展Domain属性以完全描述cookie适用的特定URL。例如,在URL http:/www.microsoft.com/asp中,域名为www.microsoft.com,路径为/ asp。

然后他们提供了一个示例:MyCookie.Path = "/asp";

我认为之前的陈述创造的问题多于答案。 所以我的问题是如果我像上一个例子一样设置cookie并且我有一个像/asp/{id}这样的映射路由会发生什么?会工作吗?

如果我使用/定义没有asp的路径,也会影响? 还有一个问题,上一个设置的范围是什么(我的意思是我可以读取cookie的网址)?

2 个答案:

答案 0 :(得分:4)

我在他们写的小写字母中找到了另一个official page的答案:

  

路径可以是站点根目录下的物理路径,也可以是虚拟根目录。结果是cookie仅可用于Application1文件夹或虚拟根目录中的页面。例如,如果您的网站名为www.contoso.com,则上一示例中创建的Cookie将可用于路径为http://www.contoso.com/Application1/的网页以及该文件夹下的任何网页。但是,Cookie不会用于其他应用程序中的页面,例如http://www.contoso.com/Application2/http://www.contoso.com/

示例:

HttpCookie appCookie = new HttpCookie("AppCookie");
appCookie.Value = "written " + DateTime.Now.ToString();
appCookie.Expires = DateTime.Now.AddDays(1);
appCookie.Path = "/Application1";
Response.Cookies.Add(appCookie);

他们还讨论了类似Domain范围的内容:

  

默认情况下,Cookie与特定域相关联。例如,如果您的站点是www.contoso.com,则当用户请求来自该站点的任何页面时,您编写的cookie将被发送到服务器。 (这可能不包括具有特定路径值的cookie。)如果您的站点具有子域(例如contoso.com,sales.contoso.com和support.contoso.com),则可以将cookie与特定子域相关联。为此,请设置cookie的域属性,如下例所示:

Response.Cookies["domain"].Value = DateTime.Now.ToString();
Response.Cookies["domain"].Expires = DateTime.Now.AddDays(1);
Response.Cookies["domain"].Domain = "support.contoso.com";
  

当以这种方式设置域时,cookie将仅对指定子域中的页面可用。您还可以使用Domain属性创建可在多个子域之间共享的cookie,如以下示例所示:

//The cookie will then be available to the primary domain as well as to sales.contoso.com and support.contoso.com domains.
Response.Cookies["domain"].Value = DateTime.Now.ToString();
Response.Cookies["domain"].Expires = DateTime.Now.AddDays(1);
Response.Cookies["domain"].Domain = "contoso.com";

答案 1 :(得分:0)

我已使用以下代码更改Cookie路径。希望它也适合你。

System.Web.HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId") { Path = "/Application", Value = newID });