dポイントプレゼントキャンペーン実施中!

スクリプトなどではなく、Apacheにセッション管理させる方法を探しています。
具体的には、たとえばログインしたユーザーだけアクセス可能なページを作る場合、通常ならスクリプトにてセッションIDをログオン時に発行、その後はセッションIDをチェックしてページを表示させますよね。
ところが、この「アクセス可能なページ」をスクリプトではなく通常のHTMLにしたいのです。

イメージとしては、Apache側でリクエストを受けた際にセッションID(CookieなりURLパラメーターなり)をチェックするような機能または外部プログラムを呼び出し、チェックOKなら何もしない、つまりリクエストどおりのHTMLを返す、チェックNGならログオンページにリダイレクトさせる、というようなものです。

mod_ext_filterを使って「セッションチェックプログラム」を呼び出すようにすればできそうに思うのですが、問題はApacheのバージョンが2.0.46のため、ExtFilterDefineにてmode=inputが使えないのです…。

代わりになるようなモジュール、あるいは代替案、というより一般的にこのようなケースではどういった方法がとられるのでしょう。

御教授のほどよろしくお願いいたします。

A 回答 (3件)

mod_rewriteを使ってhoge.htmlファイルにアクセスした場合はhoge.cgi?html=hoge.htmlにアクセスするようにする。


で、hoge.cgiでセッションをいじって、hoge.htmlを出力する。
という感じにしてみては。これだとURLの変更もありません。

代替案になってしまいますが、apacheで何とかしようとするより簡単かと思います。

参考URL:http://exam.su-jine.com/mod_rewrite/mod/rewrite. …

この回答への補足

その後いろいろ調べ、mod_perlを使えば可能なことがわかりました。
ご回答いただいた皆様ありがとうございました。

補足日時:2006/11/01 01:02
    • good
    • 0
この回答へのお礼

ありがとうございます。
なるほどmod_rewriteでスクリプトに直接リダイレクトさせる手もありますね。

その後いろいろ試行錯誤して、mode=outputでフィルターを噛ませる方法が、とりあえず成功しました。
<Directory ~ または、適用させたいディレクトリに置いた .htaccessファイルに
SetOutputFilter session-check
と1行書くだけで、HTMLや画像などすべてのファイルに対してApacheがセッションチェックしてくれる、というものです。
もう少しテストしてみますが、普通にスクリプトで処理するより軽いと思います。何しろ、まったく手を付けなくて良いのですごく楽です^^


しかしまだ問題もあるかもしれませんので、ご提案いただいた方法も代替案として検討させていただきます。
ありがとうございました。

お礼日時:2006/10/29 10:10

Basic認証でもできないこと無いけど


.htpasswdと.htaccessを利用ユーザが
自分の情報だけ書き換えができるCGI/PerlなりPHP
プログラムなりを書けばいい。

HTMLだけという考えは捨ててシステム的に
XoopsなあたりCMSあたりを使った方がいい気がするけど

この回答への補足

すみません質問の仕方が悪かったようです。
あくまでも今回の質問は、Apacheでセッション管理させる方法、あるいは代替案などを使って、セッション認証を介してHTMLファイルにアクセスさせる方法です。

アクセス制限以外の部分は割愛していますが、Basic認証では不可能であり一般的ではないものなのです。セッション管理は必須となっておりまして。
わかりやすい例を挙げれば、ショッピングカートのようなものがありますよね。

解りにくくてすみません。

補足日時:2006/10/28 21:17
    • good
    • 0

そもそもそんな事しないで


Basic認証で良いんでは?

この回答への補足

ご回答ありがとうございます。
たしかに簡単なものならBasic認証でも良いですが、今回はセッション管理が必要なシステムなんです。
パスワードをユーザーが変更したり情報を引き継いで遷移させるようなシステムでは、通常セッション管理を使いますよね。
で、それは良いのですが、それを通常のHTMLにも適用させたく、今回質問させていただいた次第です。

補足日時:2006/10/28 20:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!