1

私は Delphi で ISAPI 拡張機能を作成しており、http ステートレスの問題を克服する方法を探しています。このようなタスクにセッションを使用したいのですが、ISAPI モジュールからセッションを開始する方法が見つかりません。セッションは Web サーバーに非常に固有であるため、セッションごとに異なる方法があり、そのような機能はサーバー固有の DLL を介してアクセスされると推測します。私は現在 Apache に興味がありますが、IIS に関する情報は非常にありがたいです。
PHP のソース コードをダウンロードし、 PHPAPI void php_session_start(void)のコードを保持しているsession.cを調べましたが、そこからはあまり得られませんでした。 ISAPI Delphi Web モジュールからセッションを開始するにはどうすればよいですか (したがって、セッション変数を使用できますか)?

4

1 に答える 1

5

IIS を介した ISAPI モジュールの経験がありました。ISAPI 拡張機能は、要求を受信した Web サーバーとデータを交換するためのプロトコルを実装する DLL にすぎません。

IIS が特定の URL への要求を受け取り、その URL を処理するための ISAPI 拡張機能を登録すると、対応する DLL が IIS ワーカー プロセスによって (まだメモリにない場合) 読み込まれます。DLL は、ワーカー プロセスがアイドル状態ではないと見なしている間、メモリに保持されます。DLL がいつアンロードされるかを制御することはできないため、それを念頭に置いてソリューションを設計してください。

TWebModuleリクエストが受信されて渡されたときに発生するイベントの形式で、多くの ISAPI の詳細を抽象化します。ただし、セッションのインフラストラクチャは存在しないため、自分で行う必要があります。

私の意見では、最善の方法はセッション Cookie を使用することです (これは誰もが行っていることです)。そのため、ログオン プロセスの後、現在のユーザーが有効なユーザーであることを識別できる文字列を生成する必要があります。もちろん、その文字列を暗号化して Base64 に変換しておく必要がありますが、最初のテストでは、Cookie にユーザー名を入力するだけで済みます。

そのため、ログオンを処理した後、Responseプロパティ ( TWebResponse )TWebModule使用してたとえばMY_APP_SESSION. この Cookie は、セッション データ (この例ではユーザー名のみ) を保持します。

その後、ログオンの実行に使用されたブラウザから発信された他のすべての要求 (Requestプロパティ、クラスで表されるTWebRequest) でその Cookie の受信を開始するため、すべての要求で、Cookie 内のセッション データを検証する必要があります ( にありますCookieFields) 。期限切れのセッションまたは偽のセッションを検出した場合は、リクエストの処理を拒否してください。

ユーザーがログアウトしたら、Cookie を削除するだけです。

私は、ユーザーを識別するためのもの (名前ではなく、ある種の ID)、セッションが有効になるまでの日付と時刻、およびいくつかのセキュリティ データ (場合によっては一連のクレーム) を含むセッション Cookie を作成するために使用します。これらはすべて暗号化して Base64 に変換する必要があります。Cookie にはいくつかのセキュリティ属性も追加できることに注意してください。それらについて読んでください。また、ここでのセキュリティには、本当に信頼できるものにするために HTTPS を含める必要があることに注意してください。これは、Web アプリケーションを多かれ少なかれ安全にする重要な瞬間です。

そのため、各リクエストでは、最初にセキュリティのためにリクエストされた URL をチェックします。URL にセッションが必要であると判断された場合は、セッション Cookie を確認し、Base64 を元に戻して解読し、Cookie の内容を評価します。すべてが問題ないようであれば、リクエストは処理されます。したがって、Cookie の偽造を防止することが詐欺を回避するための鍵であることは明らかです。

おわかりのように、すべては適切な Delphi コードを記述することです。

これが役立つことを願っています!

于 2015-02-03T09:57:44.637 に答える