Cookieを使う:その1

それでは,JSPCookieを使う方法を,2回にわたって検証してみたいと思います.今回は,「Cookieの発行と破棄」を,次回は「Cookieの内容を取得する」です.

しかし何故Cookie?

それは昨日の記事を読んでもらえば分かる事だけど,ユーザがウェブサービスにログイン,ログアウトする状態を知るのに,一番簡単な方法がCookieじゃないかな,と思ったから.
Cookieはアブねーとか良く聞くけれど,「何故危ないか」なんて実際仕組みを知らないと分からない.ただ一方的に危ない(そりゃ偉い人や賢い人が言うんだから正しいんだけどさ)と決めつけるのではなく,実際に使ってみて「うわぁ,こりゃアブネーワ」と実感したいってのもあったりする.そして現に実感した訳だけど,それは次回の「Cookieの内容を取得する」でじっくり考えたいと思う.
とゆーことで,Cookieなんて良くわからない人が読んだらある程度危なさが分かるんじゃないかなぁ,とか思ったり.


それでは,JSPプログラムでクッキーを扱う:Tomcatを使う「JSPプログラミング」(8) - @ITを参考に実践していきます.

Cookieの発行

とりあえず,参考通り.

<%@ page import = "java.net.*" %>

...

sql = "select * from user where id = ?"" + id + "?" and 
      password = ?"" + password + "?";"; // 改行入れてます
rs = stmt.executeQuery(sql);
if(rs.next()){
// ログイン処理
String c_value = ""; // Cookieに格納する文字列(^$で初期化する必要はあるの?)
String cookieid = URLEncoder.encode(id); // idをURLエンコード
// まぁ本来ならこの辺でもっと色んな情報を
// URLエンコードしてはc_valueに連結していくんだと思う.

c_value = c_value + cookieid; // URLエンコードされたidを連結

Cookie cookie = new Cookie("bookdbuser",c_value);
// bookdbuserがCookieの名前,c_valueはCookieに格納される文字列

cookie.setMaxAge(60 * 60);
// Cookieの有効期間を1時間に設定(秒単位なのね)

response.addCookie(cookie);
// サーバからのレスポンスで一緒にCookieが飛ばされる

...

まぁコメント文を読んでもらえれば大体分かると思います.そんな複雑な事はしてないんで.たったこれだけで,Cookieの発行は終了ってワケ.なるほど,簡単.


実際にブラウザでCookieの名前を探すと「bookdbuser」があって,ちゃんとidがコンテンツってのに書いてたよ.

Cookieの破棄

Cookie破棄のロジックはとても簡単.もう一度同じ名前のCookieを発行し,有効期間を「0秒」にすることで,ブラウザに削除してもらう.

<%@ page import = "java.net.*" %>

...

// ログアウト処理
// Cookieの削除を行う
Cookie cookie = new Cookie("bookdbuser",""); // 破棄したいんだから,値は必要ない
cookie.setMaxAge(0); // 有効期間を0秒に
response.addCookie(cookie); // レスポンスでCookieを飛ばす

...

もしログアウト処理に入る前にCookieを取得し,なければ「ログアウトの必要はありません」とか表示すると素敵なんだろうけど,無駄に手間がかかる気がするし,取得は次回の内容なので,今はとりあえずこのJSPのクセにスッキリしたコードを眺めて心を落ち着かせましょうよ,ね.