JavaのCookieにドメインを設定する方法!setDomainメソッドの使い方を初心者向けに解説
生徒
「先生、JavaのWebアプリでCookieを使うときに、他のサブドメインでも共有したいんですけど、できますか?」
先生
「はい、できます。CookieクラスのsetDomainメソッドを使えば、Cookieを特定のドメインやサブドメインに設定できますよ。」
生徒
「それって具体的にはどんなコードになるんですか?」
先生
「それでは、javax.servlet.http.CookieクラスのsetDomainメソッドについて詳しく見ていきましょう!」
1. JavaのCookieクラスとは?
Javaのjavax.servlet.http.Cookieクラスは、HTTP通信で使われるCookieをJava Servlet内で扱うためのクラスです。Webアプリケーションでセッション管理やユーザー情報の一時保存などに使われます。
このクラスを使えば、Cookieの作成、取得、設定が簡単に行えます。Cookieには名前と値だけでなく、有効期限、パス、セキュア属性、ドメインなども設定できます。
2. setDomainメソッドとは?
setDomainメソッドは、Cookieの対象ドメインを指定するためのメソッドです。このメソッドを使うことで、Cookieをサブドメイン間で共有することが可能になります。
例えば、example.comというドメインがあり、www.example.comとshop.example.comでCookieを共有したい場合、setDomain(".example.com")と設定することで、両方のサブドメインで同じCookieが使えるようになります。
将来を見据えて、+αのスキルを身につけたい方へ
JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。
AIを学ぶならアイデミープレミアム3. setDomainメソッドの構文と使い方
基本的な構文は次のとおりです。
Cookie cookie = new Cookie("userId", "abc123");
cookie.setDomain(".example.com");
このようにsetDomainにドメイン名を文字列で渡します。先頭にドット.を付けることで、そのドメインとすべてのサブドメインでCookieが有効になります。
4. Cookieを使ってドメイン共有するサンプルコード
ここでは、実際のJava ServletでCookieを設定して、ドメインを指定するサンプルを紹介します。
import java.io.IOException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DomainCookieServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
Cookie cookie = new Cookie("username", "taro");
cookie.setDomain(".example.com"); // サブドメイン全体で有効
cookie.setPath("/"); // 全パスで有効
response.addCookie(cookie);
response.getWriter().println("Cookieが設定されました。");
}
}
このコードは、クライアントに対してusernameという名前のCookieを送信し、それが.example.comというドメインで有効になるように設定しています。
5. setDomainを使う際の注意点
setDomainを使用するときには、いくつかの注意点があります。
- クロスドメイン(異なるドメイン間)では使えません。ドメインが共通している必要があります。
- ドメインの先頭に「.(ドット)」をつけない場合、指定した完全一致のドメインにしかCookieが送信されません。
- ブラウザのセキュリティ制限によって、
setDomainの設定が無視されることがあります。
6. Cookieのドメインとパスの関係
setDomainと同様に、CookieにはsetPathメソッドで有効なパスを設定できます。ドメインが広ければ広いほどCookieは多くの場所で使えますが、必要最小限にすることでセキュリティやパフォーマンスの観点からも適切です。
例えば、setDomain(".example.com")かつsetPath("/shop")とすれば、shop.example.com以下の/shopディレクトリ内でのみCookieが有効になります。
7. Cookieの確認方法(開発者ツール)
Cookieが正しくドメインに設定されているかを確認するには、ブラウザの開発者ツールを使用します。
Google Chromeでは、ページを開いた状態でF12を押し、「Application」タブ →「Cookies」から確認できます。設定されたドメインが正しいかどうかをここでチェックできます。
8. 実行結果の例
上記のServletを実行すると、以下のようなHTTPレスポンスヘッダーがブラウザに送信されます。
Set-Cookie: username=taro; Domain=.example.com; Path=/
このように、Cookieのドメインとパスが指定された形でクライアントに送信されることが確認できます。
9. こんなときにsetDomainが役立つ
以下のようなケースでsetDomainは非常に便利です。
- 本サイト(
www.example.com)とショップサイト(shop.example.com)でユーザーログイン情報を共有したい - 広告配信のため、サブドメイン間でユーザー情報を一元管理したい
- 言語や地域によってサブドメインを分けているWebサービスで、共通Cookieを利用したい
こういったユースケースでは、setDomainを使ってCookieの有効範囲を広げることで、ユーザーにとってスムーズな体験を提供できます。
サーブレットやJSPの基礎を体系的に理解したい人には、 定番の入門書がこちらです。
スッキリわかるサーブレット&JSP入門をAmazonで見る※ Amazonアソシエイト・プログラムを利用しています