トップ «前の日記(2005-12-16) 最新 次の日記(2005-12-25)» 編集

Route 477



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を同時に使用した際の問題」だと思うが、 これ以上の深追いは止めることにした。修正予定がないんじゃしょうがないしなぁ。

[hiki] ログインできない件 その5

いまITSを見直したら、もう一件報告があったことに気づいた。(おーい)

Ticket-7では解決したはずの問題が「なぜ再発したのか?」という点が気になっていたのだが、 どうやらhiki0.8.0から0.8.4の間にスクリプト名を省略するのが デフォルトになった のが原因のようだ。

とりあえず、Ticket-29の方に報告しておいた。 (ついでにこの前見つけたバグも報告しておいた。)