ユーザは、一旦あるURL領域に対してログインすると、10.以降で常にそのユーザで利用することになる。普通のユーザは1つのユーザIDしか使わないので、わざわざログアウトする必要もないが、Webシステムの開発者や管理者は複数のIDを使い分ける必要がある。そのためには、通常ブラウザを再起動しなければならない。これは大変不便なので、ブラウザを起動したままログアウトする方法がないかを考える。
上記のBasic認証の仕組みを考えると、サーバからどうにかして、「401」レスポンスを送ってやれば解決できそうである。
普通はCGIなどのユーザプログラムでは、Webサーバのレスポンスコードを指定することはできないが、ApacheのようなCERNやNCSAの流れを汲むWebサーバでは、「nph-」で始まる名前のCGIではそれができるようになっている。これを利用してnph-logout.cgiというプログラムを作る。内容は
#!/usr/bin/perl
print <<EOF;
HTTP/1.0 401 Unauthorized
WWW-Authenticate: Basic Realm="valid users only"
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD><TITLE>401 Authorization Required</TITLE></HEAD>
<BODY>
<H1>Authorization Required</H1>
</BODY>
</HTML>
EOF
これだけである。Realmの部分を設置する環境に合わせて書きかえる必要はあるが、ログインした状態でこのプログラムにアクセスすると、「認証に失敗しました」というダイアログボックスに続き、ログイン情報の入力ダイアログボックスが表示される。
ここでキャンセルすると、以降はこのURL領域に対しては認証を求められるので、「ログアウト」された状態になっていることがわかる。