検索
ホームページJava&#&チュートリアルJavaのCookieとセッションについて

Cookie とセッションはどちらもユーザーのアクセス状態を維持するために使用され、一方ではビジネスの実装を容易にし、他方ではサーバー側のプログラム設計を簡素化し、アクセスのパフォーマンスを向上させます。 Cookie はクライアント側 (つまり、ブラウザ側) のテクノロジであり、Cookie を設定すると、サーバーにアクセスするたびに、その Cookie がリクエストに含まれます。セッションは、ユーザーのアクセス情報を保存するサーバー側のテクノロジです。サーバー上で。

Cookie を使用して情報を転送すると、Cookie の数が増加し、訪問数が増加すると、より多くの帯域幅が占有されます。セッションを使用して情報を保存すると、最大の弱点は、複数のサーバー間で共有するのが簡単ではないことです。 。

1 Cookie

簡単に言うと、ユーザーが HTTP を使用してサーバーにアクセスすると、サーバーはいくつかのキーと値のペアの情報をクライアントのブラウザーに返し、制限が満たされている場合はデータにいくつかの制限を追加します。ユーザーがサーバーにアクセスすると、以前に設定された Cookie のキーと値のペアの情報が取得されます。ユーザーが URL を入力すると、ブラウザはローカル ハード ドライブ上でその URL に関連付けられた Cookie を探します。 Cookie が存在する場合、ブラウザはページ リクエストとともに Cookie をサイトに送信します。

Cookieは特定のページではなく、Webサイトに関連付けられます。したがって、ユーザーがサイト内のどのページをリクエストしても、ブラウザとサーバーは Cookie 情報を交換します。ユーザーが異なるサイトにアクセスすると、各サイトがユーザーのブラウザに Cookie を送信する場合があり、ブラウザはすべての Cookie を個別に保存します。

Cookie 属性項目

現在、Cookie にはバージョン 0 とバージョン 1 の 2 つのバージョンがあります。これらには、「Set-Cookie」と「Set-Cookie2」という 2 つのセット応答ヘッダー識別子があります。

Cookie 0の属性値

JavaのCookieとセッションについて

Cookie 1の属性値

JavaのCookieとセッションについて

JavaでのCookieの使用例

@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Cookie[] cookies = request.getCookies();
String name = getCoodie(cookies, "name");
if (name == null) {
response.addCookie(new Cookie("name", "luoxn28"));
}
else {
System.out.println(name);
}
out.println("hello world");
}
public static String getCoodie(Cookie[] cookies, String key) {
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(key)) {
return cookie.getValue();
}
}
}
return null;
}

JavaのCookieとセッションについて

Cookieの使用に関する注意事項(Javaを例にします)

•作成された Cookie の名前と値は非 ASSIC 文字であってはなりません。中国語の場合は RRLEncoder でエンコードできます。それ以外の場合は、java.lang.IllegalArgumentException 例外がスローされます。

•複数の名前と値の値が表示される場合、それらは実際には同じ「Cookie」ヘッダー内にあります。

•「;」以外の句読点もCookieの値に保存できます。ただし、漢字は保存できません。漢字を保存すると文字化けが発生します。

Cookie のいくつかの制限

Cookie は HTTP ヘッダー内のフィールドです。HTTP 自体にはこのフィールドに対する制限はありませんが、Cookie は最終的にブラウザーに保存されます。以下に示すように、Cookie の保存にはいくつかの制限があります。以下の表に表示:

JavaのCookieとセッションについて

JavaのCookieとセッションについて

さらにCookieを保存しようとすると、最も古いCookieが破棄されます。

2 Session

Session は、Cookie の数が増えると、同じクライアントがサーバーと対話するときに、すべてを返す必要がなく、クライアントとサーバー間のデータ送信量が増加するという問題を解決します。この ID は、クライアントが初めてサーバーにアクセスしたときに生成され、通常は JSESSIONID という名前の Cookie です。

セッションは Cookie に基づいてどのように機能しますか? URL パス パラメーターに基づいて動作することもできますが、Context コンテナーの Cookie 識別子が変更されていない場合は、デフォルトでサポートされます。ブラウザが Cookie 機能をサポートしていない場合、ブラウザはユーザーの SessionCookieName をユーザーが要求した URL パラメータに書き換え、その配信方法は /path/Servlet;name=xxx;name2=xxx2?name3=xxx3 のようになります。 SessionCookieName session-config 構成項目が web.xml で構成されている場合、cookie-config の下の name 属性は、この SessionCookieName の値になります。 session-config 構成項目が構成されていない場合、デフォルトの SessionCookieName は「JSESSIONID」です。セッションに関連付けられた Cookie は他の Cookie と何ら変わらないことに注意してください。クライアントが Cookie もサポートしている場合でも、Tomcat は Cookie 内のセッション ID を解析し、URL 内のセッション ID を上書きします。

セッションの仕組み

  有了Session ID,服务器就可以创建HttpSession对象了,第一次调用request.getSession()方法,如果没有对应的HttpSession对象,则会创建一个新的,并将这个对象加入到org.apache.catalina.Manager的sessions容器中保存。Manage保存所有的session生命周期,Session过期被回收,服务器关闭,Session被序列化到磁盘。注意,一个客户端对应一个Session对象,这个对象正是保存我们创建的Session值的。

JavaのCookieとセッションについて

  request.getSession()方法调用的StandardSession永远都会存在,即使与这个客户端关联的Session已经过期。如果过期,则会创建一个新的,但是以前设置的Session值将会丢失。

3 Cookie与Session安全性比较

  Cookie将保存的数据通过HTTP头部从客户端传到服务端,从服务端再传回到客户端,所有的数据都保存在客户端浏览器中,这些数据都是可以访问到的,甚至可以通过插件添加、修改Cookie,所有Cookie的安全性是比较差的。相比较而言,Session将数据保存在服务器端,安全性高很多,只需要Cookie传回一个Cookie ID就可以,所以Session更适合保存用户隐私和重要的数据。

分布式Session框架

  在大型互联网应用中,单用Cookie和Session都是不可行的,因为如果使用Cookie可以很好地解决应用的分布式部署问题,大型互联网应用系统一个应用有上百台机器,而且有很多不同的应用系统协同工作,由于Cookie是将数据存储在用户浏览器中,用户每次访问都会讲数据带回到服务器,也就解决了同一个用户的请求在不同服务器上处理而导致的Cookie不一致问题。

JavaのCookieとセッションについて

  由于应用是一个集群,所以不能将Session都保存在每台服务器的内存中,如果每台服务器有几十万访问用户,服务器内存也容不下,即使容得下,也无法保证该Session同步到其他服务器中,所以共享这些Session需要将它们保存在专门的分布式缓存中,可以随时读取和写入,性能要够好满足要求,如memcache/redis或者淘宝的开源分布式框架Tair都是很好的选择。

表单重复提交问题

  网站中有很多地方有重复提交表单问题,为了防止表单重复提交,就要标识用户的每一次访问请求,使得每一次访问请求对服务端来说都是唯一的,为了标识用户的每次请求,可以在用户请求的表单域增加一个隐藏表单项,其值为唯一的token,如:

<form id="form" method="post">
...
<input type=hidden name="token" value="xxx"/>
</form>

  用户请求表单时生成唯一的token,并且设置到该用户的Session中,等用户提交时检测这个token是否和Session中保存的token一致,如果一致,说明没有重复提交,同时把Session中的token更新成一个新的token值;否则用户提交上来的token已经不是当前请求的合法token,提交失败。

JavaのCookieとセッションについて

以上所述是小编给大家介绍的JavaのCookieとセッションについて,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHP中文网的支持!

更多JavaのCookieとセッションについて相关文章请关注PHP中文网!


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール