0

C++ で独自の (マルチスレッド) ISAPI ベースの Web サイトを作成しており、正しいセッション管理を実装しようとしています。

問題は、新しいセッションを作成する必要があるときに、生成された Web ページで後続の要求を使用すると、セッションが 2 回作成されることです。

仕組みは次のとおりです。 - クライアントはhttp://localhostを要求し、Cookie を送信しないか、古いセッション ID を含む Cookie を送信します。- サーバーはセッション Cookie を見て、もう存在しないため、新しい Cookie を作成する必要があると感じます。新しいセッション ID を含む Cookie を含むヘッダーを準備し、完全なヘッダーをクライアントに送信します (これを次のように追跡しました)。 http live headers plugin in firefox とそれは正しいです)。また、ページなどのデータ (まだデータベースなどからのデータを処理しているため、本体データではありません) を準備し、その内容をクライアントに送り返します。- クライアントはこの新しいセッション Cookie を持つ必要があり、スタイルシート リンクを確認してすぐにスタイルシート リクエストhttp://localhost/cssを送信します。私のサーバーに。しかし...彼は、何らかの理由で、新しく受け取ったセッションIDではなく、古いセッションIDを使用してこれを行っています! - サーバーはこのリクエストを (再び存在しないセッション ID とともに) 確認し、別の新しいセッションを生成し、スタイルシート データと共に Cookie を含む新しいセッション ID を送信します。

そのため、クライアントは現在 2 つのセッション ID を受信して​​おり、最初のページが上書きされるため、今後は 2 番目の ID を使用し続けますが、それでも最初のページは間違ったセッションを使用しています (または、実際には 2 番目のページが使用しています)。

これは問題ではないと言えるかもしれませんが、パーソナライズされたスタイルシートの使用を開始すると、最初のページに間違ったスタイルシートが表示され、ページが AJAX を使用してコンテンツを更新するため (利用可能な場合)、スタイルシートがクライアントがリフレッシュしない限り、リロードされることはありません。

では、これはこの種のことを行うときに常に存在する問題ですか? ブラウザーは、新しい Cookie を既に受信しているが、まだページを処理しているにもかかわらず、常に古い Cookie を送信しますか? これは、たとえば PHP にもある問題ですか?

注: 「代わりに php を使用する」か何かについてのすべての議論が始まる前に: 私は最初に PHP で書いた Web サイトを書き直しています。それは人気になり、毎時間何千人もの (実際の) 訪問者がいて、私のサーバー (Web サイトはたくさんのサーバーを投入できるほどのお金は稼げません)。C++ で記述することにより、PHP では 200 ミリ秒のリクエストが 2 ミリ秒かかります...すべてを最適化できます。この ISAPI を正しく開発するために時間を割くことにより、これは安全にマルチスレッド化され、マルチプロセス、マルチサーバー化することができます。そして何よりも、私は挑戦が好きです。

追加された注意: ブラウザーからすべての Cookie を完全に消去し、新しい Cookie を作成してクライアントに送り返すと、後続のスタイルシート要求がすぐに使用されるため、古いセッションが Cookie に存在する場合にのみ問題があるようです。指定されたセッション ID。これは、古いセッション ID が送信されたときに何か間違ったことをしているという証拠のようです... 既存の Cookie を最初に削除する必要がありますか? どのように?

追記: Cookie は 1 年前の有効期限で書き込まれます。

4

1 に答える 1

0

パスを指定せずに Cookie を設定すると、そのドメインのすべてのパスでセッションが機能することになると想定していました。http://foo.bar/homeをメイン ページとして使用し、 http://foo.bar/home/cssをスタイルシートとして使用し、その URL を内部的に ?s1=home および ?s1=home&css=y に変換することで、実際に使用していました。 css-request に Cookie を渡さなかったブラウザーに応じて、2 つの異なるパス。

なんらかの理由で、その後実際に集まったのですが、その理由は完全にはわかりません。

これはばかげていませんか?サブディレクトリを使用して構造をきれいに保つという理由だけで、 http://foo.bar/index.phphttp://foo.bar/css/style.css.phpを持っている人はあまりいないでしょうか?

誰かがそれを修正する方法を知っていて、サブパスも同じ Cookie で動作するようにする方法を知っている場合は、私に知らせてください。具体的には / 以外のパスを追加すると、サブディレクトリでも機能しますか?)

于 2012-02-21T12:35:29.667 に答える