• ベストアンサー

Cookie認証 方法

現在、会員制Webサイトを構築しております。 会員の状態をCookie認証を使って行いたいと思います。 C言語でCGIを作成しております。 しかし、問題があります。 1.会員登録中でブラウザの「戻る」をするとCookieが取れてしまっているため、会員になれてしまいます。 2.また静的HTMLから画面遷移するとキャッシュされてしまって前の会員の情報が見れてしまいます。 1、2の打開策はございますでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

どもです。がるです。 以下補足お願いします。 > 1.に関して > 具体的にCookie値の文字列操作で可能なのでしょうか? 大まかに二種類手段がありまして。 一つは「セッションIDを格納する場所に属性を付与する」パターンです。 この場合、例えばCookieに s=abcdefg とあったときに、セッションID"abcdefg"が「ログイン認証の意味を持つセッションID」なのか「登録用のためだけのセッションID」なのかを、セッションIDを保存している場所(通常はDBが多いかと思われますが時にテキストファイルなどであるケースもあるかと思います)に明記しておきます。 もう一つは「Cookieのnameを変える」パターンです。 この場合、例えば「ログイン認証の意味を持つセッションID」をsl=で、「登録用のためだけの」場合をst=で、などという風に切り分ければOKです。 なおものすごく念のため、なのですが。Cookieに入っているセッションIDっていうのは「一時的に生成された、ユーザIDを推測することが出来ないランダムな文字列」でOKですよね? > 2.クライアントキャッシュではなく、キャッシュサーバーに依存する事例でございます。説明不足でした。すみません。 > 遷移元が静的HTMLで、あるHrefタグより遷移するとCookie認証ではなく前のキャッシュされた画面が表れるという現象です。この現象を回避すべく方法をお願いします。 えっと…ちょっと現象の想像がつかないのですが。 差し支えない範囲でよいので、以下の補足をお願いしたく思います。 「Hrefタグより遷移すると」Aエレメント、だとおもわれるのですが。どのようなhrefアトリビュート値になりますでしょうか? また、JavaScriptなど併記されていたらそれも貼り付けていただけるとありがたいです。 「前のキャッシュされた画面」とは、どのような画面を指すのでしょうか? 当初の質問と融合して予想すると ある静的なHTMLから動的なPageへ遷移するためのリンクがある。 そのリンクをクリックして遷移すると、希望としては「Cookie値を元に認証を行い、該当ユーザの情報が出力されるPageに遷移する」という挙動になって欲しいのだが、実際には「以前にそのPageへ遷移したユーザの情報(動的に生成したHTML)が残っており、現在アクセスしているユーザのCookieを基にした情報ではなく、過去にアクセスしたユーザのCookie値を基にしたHTML(サーバにキャッシュされたHTML)が出力されてしまう」。 というニュアンスでよろしいでしょうか? この場合単純にプログラムのつくりの問題かと思われます。 動的に生成したHTMLのキャッシュは、よっぽどの事情がない限り避けたほうが賢明ですし、どうしてもされる場合、徹底的な設計が不可欠かと思われます。 以上、参考になりましたでしょうか?

fm0606
質問者

お礼

お返事が遅くなりました。 大変参考になりました。 ありがとうございました。

その他の回答 (1)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 取り合えず端的に。 1.会員登録中でブラウザの「戻る」をするとCookieが取れてしまっているため、会員になれてしまいます。 基本的にはCookie発行タイミングの問題だと思うのですが。 後は、登録画面の遷移で「入力画面が複数」とか「確認画面がある」場合に多いのですが。「正規のユーザがログインしたことを意味するセッションID」と「登録時にユーザを一意に認識するためのセッションID」は厳密に切り分けて設計するとよいと思われます。 2.また静的HTMLから画面遷移するとキャッシュされてしまって前の会員の情報が見れてしまいます。 このキャッシュとは「クライアントキャッシュ」でよいですよね? 基本的には「レスポンスヘッダに"キャッシュしない"指示を付け加える」事である程度問題が回避できます。 具体的には Expires: 0 Pragma: no-cache Cache-Control:no-cache の3つのヘッダを付け加えてください。これで、概ねどんなブラウザでも認識が出来るかと思います。 以上、参考になりましたでしょうか?

fm0606
質問者

補足

早々のご回答ありがとうございます。 以下補足お願いします。 1.に関して 「正規のユーザがログインしたことを意味するセッションID」と「登録時にユーザを一意に認識するためのセッションID」は厳密に切り分けて設計するとよいと思われます。 具体的にCookie値の文字列操作で可能なのでしょうか? 2.クライアントキャッシュではなく、キャッシュサーバーに依存する事例でございます。説明不足でした。すみません。 遷移元が静的HTMLで、あるHrefタグより遷移するとCookie認証ではなく前のキャッシュされた画面が表れるという現象です。この現象を回避すべく方法をお願いします。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう