2017-05-18 1 views
0

私がしたいのは、.NET環境(同じ機能を持つキャッシュもOKですが、別のブラウザ用に異なるクッキー値を作成することですが、そのためにキャッシュを使用する)。.net異なるブラウザ用のクッキークライアント側を作成する

明確にするために、異なるブラウザでさまざまな値のCookieを使用できるようにする(たとえば、ChromeとFirefoxの両方で同時に)さまざまなブラウザでWebアプリケーションを開くことができるようにしたいとします、Cookieの名前は「MyCookieKey」、Chrome用に値V1を保存し、Firefox用に別の値V2を保存したい) クッキーは、クライアント側のみに有効である必要があります。私はHttpContext.Current.RequestまたはHttpContext.Current.Responseを使用したら

HttpContext.Current.Request.Cookies, 

HttpContext.Current.Response.Cookies, 

HttpCookieCollection. 

、私のアプリは動作しませんでした(私は正確に何の問題を把握できなかった):私は(別途)今まで試したどのような

私がHttpCookieCollectionを使用したとき、さまざまなブラウザがCookieを共有しました。

よろしくお願いいたします。

+0

ブラウザはCookieを「共有」しないでください。両方のブラウザに同じCookieを送信したことを意味しますか?もしそうなら、どのようにブラウザタイプをテストしていますか? – Orangesandlemons

+0

"Domain"という名前のCookieを作成しました。 私のアプリのユーザーは、urlに変更して、他の同様のWebアプリケーションを接続することができます。 そのクッキーでは、私はアプリケーションの選択されたドメインを維持します。 たとえば、私は2つのドメイン、website1.comとwebsite2.comを持っており、ユーザーはドメインを変更することができます。 アプリケーションのデフォルトURLはwebsite1.comです。このアプリを使用している間、ユーザーはドメインをwebsite2に変更できます。 ユーザーがChromeでドメインを変更すると、ブラウザが終了する(またはユーザーがログアウトする)まで、新しい選択されたURL(website2.com)でアプリが実行されます。 しかし、他のブラウザ(Firefoxなど)のアプリのドメインにも影響します。 ++ –

+0

++ユーザーがChromeでwebsite2.comを選択すると、FirefoxではデフォルトのURLがwebsite2.comに、またはその逆になります。 私が望むのは、ユーザーがドメインを変更してブラウザに保存させても、他のブラウザには影響しないということです。 ドメインはここでの例に過ぎません。クライアント側のセッションでは、ブラウザごとに個別に を保持する必要があるため、ドメインを例にとってみましょう。テストについては、私は単に別のブラウザのための私のプログラムをラム、 私はそれが私が望むように動作しないことを参照してください。 –

答えて

0

ウェブアプリケーションは一般に、別のブラウザを追跡している別のマシンを追跡しません。別のブラウザSessionsを追跡します。あなたのアプリケーションに接続するクライアントの各インスタンスは新しいセッションを生成し、このセッションに関する情報は一般にという特別なクッキーによって管理されます。ASP.NET_SessionIdセッションを追跡するための設定では、Cookie名を変更したり、非Cookieトラッキングを使用したりすることができます。 セッションのトラッキングは、別々のブラウザを区別するためにいくつかの異なる方法で利用できます。

1つの方法として、セッションカウントを追跡する方法があります。これは、、global.asaxによって行われ、異なるアプリケーションイベントとセッションイベントに追加されます。 How to count Sessions in ASP.NetというタイトルのSOスレッドにいくつかの回答があります。

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を設定する時期です。そのアプリケーションオブジェクトにアクセスしてカウントを取得し、それを使用して別のCookie値を作成することができます。

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

この問題は、アプリケーションが現在のセッションを追跡していることが原因です。これは、サイトの開始と終了への接続が増えるにつれて増減します。あなたができることは秒を追加することですアプリケーション/セッションで同様のメソッドを持つアプリケーション変数は、0から始まりインクリメントし始めます。ただし、その値のセッション終了デクリメントを追加しないでください。これはアプリサイクル内のセッションの総数になります。サイトが再起動されると、0に戻ります。

私が扱うサイトの1つに、当然ながらデータベースへのすべての接続を記録し、その方法で作業するサイトがあります。これは、何ができるかについてのあなたにいくつかのアイデアを与えることです。アプリケーションとセッションオブジェクトをよりよく理解するために、文書化されたリンクを読みました。セッションクッキーと同様です。

+0

ありがとうございます。私はそれがうまくいくかどうか検討し、書きます。 –

関連する問題