2009-03-08 8 views
3

私はこの作品に言われましたが、...2つの.net 2.0以上のアプリケーション間でセッション変数を共有できますか?

私はこれを得ていないと思います。私は行方不明になる可能性があります。誰かがこれを修正したり、間違いを指摘できますか?ありがとう。

私はブランク溶液持っている:
を - 内部は2つの.NET 2.0のWebアプリケーション
1である))
2のwebapp1私は彼らが同じセッションデータを共有したい

をwebapp2を。

マイページ設定:

アプリケーション1:

Session("value") = "this is the value" 

は、アプリケーション2:

If Not (Session("value") Is Nothing) Then 
    value = Session("value").ToString() 
End If 

は私の思考プロセス:

1)は、ASPをオンにし、サービスにアクセスしてください.net状態サービス
2)bでWeb設定を開きますoth projects:

< machineKey 
validationKey="BFE2909A81903BB303D738555FEBC0C63EB39636F6FEFBF8005936CBF5FEB88CE327BDBD56AD70749F502FF9D5DECF575C13FA2D17CA8870ED21AD935635D4CC" 
decryptionKey="2A86BF77049EBA3A2FA786325592D640D5ACD17AF8FFAC04" validation="SHA1" /> 
< sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" 
cookieless="false" timeout="20"/> 

両方のサイトで設定します。
3)サイトをコンパイルしてテストします。
4)動作しないために失望します。私は2番目のwebappからセッションを見ることはありません。

答えて

3

なぜアプリケーション間でセッションを共有したいのですか? ASP.NETセッションはそれを行うようには設計されていません。

同じマシンと同じブラウザから2つのアプリケーションを同時に使用しても、2つの異なるセッショントークンを取得するため、同じASP.NET State Serverを使用することで提案されたソリューションは機能しません。 Sessionがなぜこれがどういうものなのかを理解する方法を検討する必要があります。 MSDNから

ASP。NETセッション状態を使用すると、WebアプリケーションのASP.NETページをユーザーがナビゲートするときに、 ユーザーの値を格納および取得できます。 HTTPは ステートレスプロトコルです。これは、Webサーバーが各HTTP の要求を独立した要求として処理することを意味します。サーバーは、以前の要求中に使用された変数値については、 の知識を保持しません。 ASP.NETセッションステートは、 セッション中に同じブラウザからの要求を識別し、そのセッションの期間中に可変値を保持する方法を提供します。

ASP.NETセッションASP.NETアプリケーションとユーザーの現在の対話のための比喩です。 ASP.NETには、アプリケーションを使用している間にユーザーが作成するさまざまなページ要求の間に一時的な状態データを格納する場所があります。

アプリケーションが非常に密接に関連している場合、たとえばユーザーは同時に、またはほぼ同じ時間に両方を使用して、1つのASP.NETアプリケーションにそれらをマージすることを検討できます。ある程度の論理的分離を維持するために異なる仮想ディレクトリに展開できますが、IISでは1つのアプリケーションしか使用できません。

アプリケーションが密接に関連していない場合は、データを交換する手段として、またはAPIを使用して、同じデータベースを共有する必要があります。 Webサービスに基づいて情報を交換します。

+8

これは答えではありません。 "なぜあなたはそれをしたいのですか" == "私はそれをやる方法がわかりません"。何人かの人々は、他の理由(企業の決断など)に合併することができないサイトを持つことがあります。これを行う方法があれば、単純に無視されるのではなく、探求されるべきである。 – mikeschuld

+0

@mikeschuldセッションメタファーは、単一のASP.NETアプリケーションとのユーザーの現在のやりとりに適用され、そのユースケース外では適切ではありません。セッションのメタファーの外を見ると、他にも多くのデータを共有する方法があることがわかります。他の選択肢を探求するほうがはるかに優れています。私は、アプリケーションを統合すること、または同じDBを共有すること、またはアプリケーション間のインターフェースをとることを示唆しています。これは、セッションがハッキングするように設計されていないことをはるかに良い解決策だと考えているからです。 – saille

5

カスタムコードなしで異なるASP.NETアプリケーション間でセッションを共有することはできません。 web.configで行ったことは、アウトプロセスセッションを使用することでした。つまり、データはメモリになく、専用マシンのメモリに格納されます。これはサーバーファームに役立ち、ApplicationNameを使用してセッションが属するアプリケーションを識別します。したがって、セッションを共有する場合は、基本的にアプリケーションの名前を同じにする必要があります。しかし、いくつかの汚れがありますworkarounds

+0

私のためにはうまくいきませんでした。それはほとんどの人にはうまくいかなかったようです。アプリケーション名はどうやって設定しますか?私は、SQL Serverを使用することはできません、私は状態サーバーを使用する必要がありますか、またはプロセスで.. –

+0

は、 "仕事"にthosの回避策を得ることができました –

+0

私の個人的な経験では、アプリケーションでは保証できません。 CodeProjectのソリューションはハッキリようだが、IMHOはうまくいくはずだ。 –

1

セッションのデータが同じアプリケーションプールにあり、セッションモードがinprocに設定されている場合、セッションデータを共有します。 stateserverとsqlstateの動作は、Webアドレスのルートを論理的な境界として使用することです。

例:両方が同じアドレスとポート(またはiisの 'site')でホストされていて、異なるsibfoldersでホストされている場合、私は思っているセッションを共有する必要があります。

+1

プロジェクトは1つのプロジェクトとしてコンパイルされるので、それはうまくいきませんが、両方のプロジェクトを別々にコンパイルし、別の仮想ディレクトリを並べて展開したいと考えています。 –

+0

私も同じように試しましたが、まだこの方法では動作していません –

1

さらに、両方のアプリケーションを同じドメインで実行する必要があります。そのため、ユーザーブラウザは1つのCookieを使用してセッションIDを保存します。

+0

同じように試しましたが、まだこの方法では動作していません –

関連する問題