セッション、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;iout.println(cookies[i].getName + ":"+ cokkies[i].getValue()+"< br >");
}

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≫:サーバー上の情報のため、処理速度が遅い