セッション、Cookie
9400 ワード
HTTPプロトコルの特徴
接続なし/ステータスなし
1.接続なし
HTTPの特徴は,クライアントがまず要求をサーバに送信すると,サーバがクライアントに応答を送信して接続を切断することである.
2.ステータス情報を保持しない(ステータスなし)
接続が切断されると、クライアントとサーバとの通信が終了し、ステータス情報は保持されません.
CookieとSessionは上記の2つの特性を補うために使用され始めた.
セッション
1つの技術は、同じユーザ(ブラウザ)からの一連の要求を一定期間にわたって1つの状態と見なし、この状態を維持することができる.
ここで、しばらくの間、訪問者がWebブラウザを介してWebサーバに接続した瞬間から、Webブラウザを閉じて接続を終了する瞬間を指す.
セッションの作成
setAttribute(String name, Object value)
実際の使用例
session.setAttribute("memverId","admin")
セッションデータの読み込み
getAttribute(String name)
実際の使用例
String id = (String)session.getAttribute("memberId")
リスト時
List< String> myStuff = (List< String>) session.getAttribute(“myToDoList”);
セッションの削除
removeAttribute(String name)
nameは、セッションに格納されているセッション属性の名前です.
使用例
session.removeAttribute("memberId")
複数のセッションを同時に削除
session.invalidate()
セッション有効時間の設定
getMaxInactiveInterval()/秒
session.getMaxInactiveInterval()
todo-demo.jsp파일
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ToDo 리스트</title>
</head>
<body>
<!-- 1.html form 작성 할일을 입력받을 form생성 -->
<form action="todo-demo.jsp">
새 할일 : <input type ="text" name = "theItem">
<input type="submit" value="입력">
</form>
<!-- 1.5.입력 아이템을 테스트 출력 -->
<%=request.getParameter("theItem") %>
<!-- 2.세션에 할일 목록을 추가해서 저장-->
<%
//세션에 저장된 todo리스트를 꺼낸다
//세션에 목록이 하나라도 있다면 먼저 꺼낸후 새로운 목록을추가하고 같이 저장하기때문에 먼저 get해야함
List<String> items = (List<String>)session.getAttribute("todoList");
//만약 todo리스트가 없으면 새로 만든다
if(items == null){
items = new ArrayList<String>();
session.setAttribute("todoList", items);
}
//입력 아이템 추가하다
String theItem = request.getParameter("theItem");
//버그발견 1.빈칸입력된다 2.할일 중복된다
//.trim()좌우 공백 제거 (스페이스만 입력해도 추가 되지안게하기위해)
//contains()대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수이다.
//! 부정
if(theItem !=null){
boolean isItemNotEmpty = theItem.trim().length()>0;
boolean isItemNotDuplicate = !items.contains(theItem.trim());
if(isItemNotEmpty && isItemNotDuplicate){
items.add(theItem);//할일 리스트추가
session.setAttribute("todoList", items);//추가된 items을 세션에 저장
}
}
%>
<!-- 3.화면에 출력하기 -->
<hr>
<b>할일 목록</b><br>
<ol>
<%
for(String temp : items){
out.print("<li>"+temp+"</li>");
}
%>
</ol>
</body>
</html>
クッキー
Cookieは、クライアントがローカルに格納した鍵と価値を含む低容量のデータファイルです.
Cookieには、名前、値、有効期限(Cookie保存期間)、パス情報が含まれます.
Cookieはしばらくの間データしか保存できません.なのでログイン状態のままの場所で使用します.
(銀行のようなところは、基準が短いので、安全性が重要です)
Cookieはクライアントのステータス情報をローカルに保存し、参照します.
Cookieの作成
Cooke Cookie(String name, String value)
使用例
Cookie cookie = new Cookie("memberId,"damin");
response.addCookie//Webブラウザに追加されたcookieを送信
Cookieを読み込む
複数のCookieオブジェクトをCookie配列としてインポート
Cookie[] request.getCookies()
使用例
Cookie[] cookies = request.getCookies();
Cookieオブジェクト情報の取得
String.getName(),String.getValue()の使用
使用例
Cookie[] cookies = request.getCookies();
for(int i=0;i
}
Cookieの削除
Cookieを削除する機能は、特に強化されたものではなく、保存時間を期限切れにすることでCookieを削除します.
void setMaxAge(int age)
使用例
Cookie cookie = new Cookie("memberId","admin");
cookie.setMaxAge(0);
response.addCookie(cookie);
セッションとクッキーの違い
1.保存場所
Cookie:ファイルをクライアントとして保存
≪セッション|Sessions|ldap≫:≪サーバーに保存|Save to Server|ldap≫
2.安全性
Cookie:クライアントがローカルに格納されているため、セキュリティが低下しています.変更が発生したり、リクエストでリスニングされたりする可能性があります.
≪セッション|Sessions|emdw≫:Cookieを使用してセッションidのみを格納し、サーバに分割するため、比較的安全です(Cookieよりもセキュリティが優れています).
3.有効期限
Cookie:有効期限はありますが、ファイルとして保存するため、ブラウザを終了しても情報は存在し続ける可能性があります.有効期限が十分に残っている場合は、Cookieを削除するまで保持される可能性があります.
≪セッション|Sessions|ldap≫:有効期限を指定できますが、ブラウザが終了すると削除されます.
4.速度
クッキー:クッキーには情報があるので、サーバを要求するスピードが速いです.
≪セッション|Sessions|ldap≫:サーバー上の情報のため、処理速度が遅い
Reference
この問題について(セッション、Cookie), 我々は、より多くの情報をここで見つけました https://velog.io/@hoppang/세션쿠키テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol