2005-12-18
■ [hiki] ログインできない件 その2
(その1はこちら)
「xrea hiki」でgoogle検索してみたら、ITSに既に登録されているのを発見。気づけよ俺!
が、ITSの方をよく読むと、0.8.4では何も設定しなくても動くはずのようだ。これはおかしい。
XREAのサポート掲示板をcookieで検索すると、こんな記事があった。
2002/06/22, 05:53 PM raccy 色々調べてみました。 どうやら、フォルダにアクセスの場合はクッキーが発行されないようです。 domainもpathも明示して、発行しようとしてもダメでした。 (以下略)
試しにhikiconf.rbの
@cgi_name = 'hiki.cgi'
を有効にしてみると……ログインできた!
■ [hiki] ログインできない件 その3
簡単なCGIを作って検証してみた。
#!/usr/bin/env ruby require 'cgi' print <<EOH Content-Type: text/html Set-Cookie: #{CGI::Cookie.new('name'=>'time', 'value'=>Time.now.to_s)} <html><body>#{CGI.escapeHTML CGI.new.inspect}</body></html> EOH
これをa.cgiとし、ディレクトリ/test/以下に置く。.htaccessに、DirectoryIndex a.cgiのように書いておく。
http://xxxxxx.com/test/a.cgi にアクセスした場合はちゃんとcookieが貰えるが、 http://xxxxxx.com/test/ だと貰えなかった。
まとめとしては、XREAにHiki(0.8.4)を置く場合は、hikiconf.rbで@cgi_name = 'hiki.cgi' の行を有効にしておく ということで。
未だ分からないのは、
- なぜw3mでオプション-dump_headを付けた場合だけcookieが貰えるのか
- そもそも、apacheでどんな設定をすればこんなことが起きるのか(^^;
という辺りか。
■ [hiki] ログインできない件 その4
「なぜw3mでオプション-dump_headを付けた場合だけcookieが貰えるのか」の答えがひらめいた。HEADリクエストだからだろう。
実際に、Net::HTTPを使ってHEAD、GET、POSTリクエストを試してみる。
yhara@cosmos:~ % ruby -rnet/http -e'Net::HTTP.start("xxxxxxx.com"){|http| http.head("/test/").each{|k,v| puts "#{k}: #{v}"}}' connection: close content-type: text/html date: Sun, 18 Dec 2005 06:48:04 GMT server: Apache set-cookie: time=Sun+Dec+18+15%3A48%3A04+JST+2005; path=/test/
yhara@cosmos:~ % ruby -rnet/http -e'Net::HTTP.start("xxxxxxx.com"){|http| http.get("/test/").each{|k,v| puts "#{k}: #{v}"}}' cache-control: no-cache connection: close content-type: text/html x-powered-by: ModLayout/3.2.1 date: Sun, 18 Dec 2005 06:48:13 GMT server: Apache transfer-encoding: chunked
yhara@cosmos:~ % ruby -rnet/http -e'Net::HTTP.start("xxxxxxx.com"){|http| http.post("/test/","").each{|k,v| puts "#{k}: #{v}"}}' cache-control: no-cache connection: close content-type: text/html x-powered-by: ModLayout/3.2.1 date: Sun, 18 Dec 2005 06:48:25 GMT server: Apache transfer-encoding: chunked
HEADのときはヘッダにset-cookieが含まれているが、GET、POSTではそれがない。
同時に、「apacheでどんな設定をすればこんなことが起きるのか」の方もヒントが得られた。 GET、POSTの場合だけmod-layoutが使用されるようだ。
XREAのサポート掲示板をmodlayoutで検索すると、こんな記事が見つかった。
2005/02/21, 02:28 PM webmaster 広告の自動挿入、ModLayout関連のでのエラーは既知の問題となっています。 特にヘッダーを操作、上書きする処理にエラーが発生します。クッキー、Location等で期待しないエラーが発生します。 このような場合は、手動で挿入してください。 残念ながら、現在のところ、ModLayout関連のエラーは修正予定はありません。 別の広告配信システムを1年以上前から用意していますが、変更いたしますと、ModLayout関連のコマンドが使えなくなるため、保留しています。
CGIのパス名を省略しなければうまく動くので、「ModLayoutとDirectoryIndexを同時に使用した際の問題」だと思うが、 これ以上の深追いは止めることにした。修正予定がないんじゃしょうがないしなぁ。