クッキー実装

Yahoo Briefcase

先週から仕事を再開したため、予想通り、開発ペースが下がりました。インターネットに接続できない職場なので、仕事以外やること無しです(仕事しろよ)。

とは言っても、0.2 に向けて少しずつ進んでいるわけで、ついに My Yahoo(http://my.yahoo.co.jp/) にログインできる様になりました。つまり、フォーム以外でもクッキーをサポートしたという意味ですね。

テストしてみて分かりましたが、Java には FollowRedirects という機能があります。これは、サーバからリダイレクトの HTTP レスポンス(302 とか)が返ると、自動的にリダイレクトをして、リダイレクト先のエレメント(HTML データなど)を返してくれる機能です。

ところが、このリダイレクトした際の HTTP レスポンスヘッダーが取得できないため、FollowRedirects を有効にしていると My Yahoo などはログインできないことが分かりました。My Yahoo は、ログイン直後に 302 レスポンスと共にクッキーを発行します。ブラウザは 302 を受け取ると、リダイレクト先に再接続します。そしてリダイレクト先で、先ほど発行したクッキーが設定されているかをチェックして、クッキーが設定されていればユーザ毎の My Yahoo の画面を、設定されていなければ、クッキーが設定されていない旨のページを表示するのです。

話はそれますが、この手法は、セッションキーをクッキーでしか想定していない場合には、非常に有効です。また、Java ServletPHP などは、セッションキーをクッキーで持てない場合に、URL にセッションキーを自動で付加する手法もあります。経験的に一長一短で、クッキーしか想定しないと開発が楽になり、URL にも埋め込む様にすると、携帯電話からのアクセスをサポートできる様になります。

まあ、そんなわけで影鷹は HTTP レスポンスによる挙動変化を自前で実装する羽目になりました。HTTP/1.1 のドキュメント(RFC2616)を読んでいますが、これって既存のブラウザとは挙動が違いますよねぇ・・・。やっぱり他のブラウザに合わせた方がいいですよね。テストが面倒だなぁ。

また、フォームもクッキーも、まだリリースできるレベルではないため、皆さんへのお目見えまでは、今しばらくかかります。それまで、添付の画像で我慢してくださいね。たぶん、今週中くらいには、ベータ版をリリースできるかもしれません。