4

私は2つのウェブサイトをwebsite1website2と見なしています。

website2 にはログイン ページがあります。ユーザーがログイン ボタンをクリックすると、website1 の HTTPhandler が呼び出されてユーザーが認証されます。認証が成功すると、ハンドラーからのセッション変数にユーザー情報が格納されます。

その後、website1 のページ page1.aspx にリダイレクトされます。しかし、以前に設定されたセッションは page1.aspx では利用できません。

最初のリクエスト(ウェブサイト 2 からウェブサイト 1 でハンドラを呼び出すとき)と 2 番目のリクエスト(ハンドラから page1.aspx にリダイレクトするとき)でセッション ID を確認しましたが、セッション ID が異なります。

セッションデータを保持するにはどうすればよいですか?

4

8 に答える 8

3

両方の Web サイトで共有される別のプロセスにセッション データを保存する必要があります。次の 2 つの方法で実行できます。

  1. SQL サーバーを構成する
  2. 情報を共有するために使用される Windows サービスである SessionState サービスを構成します。

どちらの場合も、新しいセッション モードをサポートするには、両方の web.config ファイルを変更する必要があります。つまり、SQL を使用するには:

データベースを準備します (コマンド プロンプトから):

cd \Windows\Microsoft.NET\Framework\v4.0.30319
aspnet_regsql.exe  -ssadd -E -S localhost\sqlexpress

Web 構成を次のように変更します。

<sessionState mode="SQLServer"
        sqlConnectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=Test" allowCustomSqlDatabase="true"/>

コードを変更する必要はありません。

于 2013-01-17T16:47:18.967 に答える
2

私の知る限り、異なるドメインが単一のセッションを共有することはできません。これを処理する 1 つの方法は、Cookie を介してデータを他のサイトに転送し [セキュリティのために値を暗号化] し、この Cookie 値を受信した他のサイトのセッションにコピーして、Cookie を破棄することです。

また、サイトが異なるサーバーにある場合は、サーバーがセッションを共有できるように「スティッキー セッション」を処理する必要があります。

于 2013-01-18T12:45:52.893 に答える
1

異なるサーバーでホストされている2つのWebサイトがあります。つまり、2つの異なるプロセスが別々のマシンで実行されているため、セッションは確実に異なります。デフォルトではasp.netがメモリ内セッションをサポートしているため、同じセッションをプロセス間で共有することはできません。

ここでは、2つのプロセス間で共有できる(つまり、プロセス外の)セッション情報の保存について考える必要があります。セッション情報をデータベースに保存する理想的な方法。このために、上記のStefanoAltieriコードサンプルを検討できます。

于 2013-01-22T04:07:06.567 に答える
1

Web サイト間でセッションを共有するには、ハンドコーディングが必要になります。これを機能させるためにasp.netフレームワークをハックすることもできますが、これはあなたが設定したことを達成するためのクリーンな方法ではないと感じています。

Web サイトからユーザー認証だけを行っている場合、代替手段を使用することは可能ですか? ここでは、シングル サインオン メカニズムが役立ちます。

この場合、SAMLSSOのようなものが役立ちます。

于 2013-01-19T13:21:49.877 に答える
1

コンテキストが異なるため、 IRequiresSessionState は役に立たないと思います。同じ問題が発生したことがありますが、それは asp セッション変数を .net に渡すことでした。ここでもどこまでやれるか。両方の Web サイトでページ setsession.aspx を作成します。ページにいる場合、web1/page5.aspx と言って、web2/page3.aspx に移動したい場合は、web1/setsession.aspx にリダイレクトしますか? togo1 =web2/page3.aspx 両方の setsession.aspx ロジックで、セッションデータを抽出してクエリ文字列に配置します

したがって、web1/setsession は web2/setsession.aspx?sess1=value1&sess2=value2& togo=page3.aspx にリダイレクトされます

web2/setsession.aspx は togo クエリ文字列をチェックし、見つかった場合はすべてのクエリ文字列の名前と値を抽出してセッションに設定し、togo 値にリダイレクトします。

togo1 と togo を慎重に区別する必要があります。

于 2013-01-17T06:58:30.703 に答える
1

この状況は、私が以前に経験して取り組んだ状況と似ているように思えます。つまり、1 つの Web アプリケーションがログイン ページとして機能し、別の Web アプリケーションが実際のアプリとして機能し、そこですべての作業が行われます。役立つことを願って、私が何をしたかを説明できます。

あなたのように、ログインページを持つWebアプリが1つありました(したがって、あなたの例ではこれはwebsite2になります)。ログインフォームが送信されると、website1Login.aspxの偽のページにリダイレクトされます。HttpHandler

私の場合、website2 Login.aspxページは実際には Web アプリケーションへの入り口にすぎません。マークアップはなく、ユーザーを認証し、セットアップ (セッション変数の設定など) を実行してから、Homepage.aspx. この特定のシナリオは私にとってはうまくいったので、HttpHandler理由を説明することはできませんが、あなたの問題は a の使用を中心に展開している可能性があります。

于 2013-01-09T12:43:07.243 に答える
1

ASP.NET Web アプリケーションを実行している 2 つの異なるサーバー間で同じセッション日付を保持するには、セッション状態がアウト オブ プロセスで管理されるように構成する必要があります。これは、実際のセッション状態データ変数がワーカー プロセスの外部に格納され、セッション データを他のマシンで使用できる別のプロセスに格納されることを意味します。

これを実現するには、SQL Server を使用してセッション状態を保存し、ファーム内の複数のサーバーで利用できるようにアプリケーションを構成できます。TechNet の記事「セッション状態を維持するために SQL Server を構成する (IIS 7)」では、IIS 7 で行われる詳細について説明しています。

IIS 6 を使用している場合は、構成手順が多少異なります。必要に応じて、詳細を提供できます。

これを機能させるには、両方のサーバーが myapp.com などの同じドメイン内でアプリケーションを実行していることを確認する必要があります。そうしないと、2 つのサーバー間で ASP.Net セッション Cookie が渡されません。ASP.Net は Cookie を使用して SQL Server に保存されているセッション状態を検索するため、2 つのサーバー間の要求で Cookie が渡されない場合、一致するセッションは見つかりません。

于 2013-01-16T10:16:56.357 に答える
0

2 つの Web サイト間でセッション情報を共有する必要はまったくないと思います。私がコメントから収集できることから、あなたが実際にやろうとしているのは、あるWebサイトでユーザーを認証させ(検証されたユーザー名とパスワードを提供します)、その「ログイン」状態を別のWebサイトに転送することです。それ自体の認証を処理しません。

あなたが説明しているのは、委任認証モデルです。

このモデルでは、アプリケーションは、ユーザーに関する情報を提供するために信頼する他のシステムに認証を渡します。

このメカニズムを提供する 2 つのよく知られたプロトコルがあります。

OpenID
これは、ユーザーが独自の ID プロバイダー (Google、Facebook、Microsoft アカウント) でログインしやすくすることを目的としています。ほとんどのユーザーはログインに使用できるアカウントを既に持っているため、一般向けの Web サイトを運営している場合、これは非常に良い選択です。

WS-Federation
これは、パートナー組織などの既知の信頼できる関係者によって管理されている ID プロバイダーにユーザーがログインしやすくすることを目的としています。

バージョン 4.5 以降、.NET Framework には、 Windows Identity Foundationコンポーネントを介した WS-Federation のサポートが組み込まれています (以前のバージョンの場合は、別のダウンロードとしても利用できます)。これにより、認証を ID プロバイダーに委任するタスクが自動化されます。

また、独自の ID プロバイダーを作成するためのコンポーネントも提供しますが、独自の ID プロバイダーを作成する必要はありません。このジョブを実行するためのさまざまな既存の実装を見つけることができます。


あなたが解決しようとしている問題は非常に難しいものであり、特に信頼できるほど十分に安全にしようとしています。良いニュースは、あなたや私より賢い人たちが、これを行うための非常に巧妙な方法を何年も費やしてきたことです. 彼らが行ったことを使用する必要があり、セッション状態から何かをまとめようとしないでください。

長い目で見れば、賢い男性に面倒な仕事を任せるのが最善です。

于 2013-01-22T11:52:42.067 に答える