.net为不同的浏览器创建cookie客户端

时间:2017-05-18 12:38:32

标签: c# asp.net cookies visual-studio-2013 httpcontext

我想做的是为.NET环境中的不同浏览器创建不同的cookie值(具有相同功能的缓存也可以,但我无法弄清楚如何使用缓存)。

为了澄清,我希望用户能够同时在不同的浏览器中打开我的网络应用程序(例如,同时在Chrome和Firefox上),在不同的浏览器上可以使用不同的cookie值(例如, Cookie名称是" MyCookieKey",我想为Chrome存储值V1并为Firefox存储不同的值V2)。 并且Cookie应仅对客户端有效。

到目前为止我已经尝试过(单独):

HttpContext.Current.Request.Cookies,

HttpContext.Current.Response.Cookies,

HttpCookieCollection.

当我使用HttpContext.Current.RequestHttpContext.Current.Response时,我的应用无法正常工作(我无法确定究竟是什么问题)。

当我使用HttpCookieCollection时,不同的浏览器会共享Cookie。

问候。

1 个答案:

答案 0 :(得分:0)

Web应用程序通常不会跟踪访问它们的单独计算机,它们只是跟踪不同的浏览器Sessions。连接到您的应用程序的客户端的每个实例都将生成一个新会话,有关此会话的信息通常通过名为 ASP.NET_SessionId 的特殊cookie进行管理。跟踪会话的配置允许更改cookie名称或使用非cookie跟踪。可以通过几种不同的方式利用对会话的跟踪来区分不同的浏览器。

一种方法是让您的应用程序跟踪会话计数。这可以通过 global.asax 完成,并添加到不同的应用程序和会话事件中。 SO标题中有几个答案标题为How to count Sessions in ASP.Net

protected void Application_Start() {
    Application["LiveSessionsCount"] = 0;
}

protected void Session_Start() {
    Application["LiveSessionsCount"] = ((int)Application["LiveSessionsCount"]) + 1;
}

protected void Session_End() {
    Application["LiveSessionsCount"] = ((int) Application["LiveSessionsCount"]) - 1;
}

什么时候设置你的cookie;您可以访问该 Application 对象以检索计数,并使用它来创建不同的cookie值。

int LiveSessionsCount = (int) Application["LiveSessionsCount"];
string MyCookieValue = "V" + LiveSessionCount.ToString();
Response.Cookies["MyCookieKey"] = MyCookieValue;

问题在于应用程序正在跟踪当前会话。随着与您网站的连接开始和结束,这将增加和减少。你可以做的是添加一个第二个应用程序变量,它在App / Session中有类似的方法从0开始并递增;但是,请勿添加该值的Session End减量。这将是应用程序周期内的会话总数。重新启动站点时,这将返回到0。

您可以使用其他方法,我使用的其中一个站点将所有连接记录到数据库中并以此方式工作。这只是为了给你一些关于可以做些什么的想法。我会阅读文档链接以更好地理解应用程序和会话对象;以及会话cookie。