[Web]Cookieとセッション
24859 ワード
HTTPはステータスレスプロトコル
HTTPプロトコルは無状態であり,以前のウェブページ情報を知らない.
以前のレコード(ログインなど)が消えてしまう問題.
以前のWebデータの使用方法
1.cookie:クライアントPC上のcookieファイルに情報を格納し、Webページ間で共有する
クッキー
Cookieは、ウェブページ間で共有する情報をクライアントPCに格納して使用する方法である.
クライアントのCookieを
継続クッキーをファイルとして作成します.削除または設定の終了まで保持します.クライアント設定などを保存するためのCookie.
セッションCookieはブラウザメモリに作成されます.ブラウザが閉じる前に保持します.サーバはセッションを区別するCookieに使用します.
Cookieシーケンス
Cookie作成者
Cookie c=new Cookie(名前、値);
Cookieの有効期間の決定
c.setMaxAgent(有効期間);
Cookieをサーバからクライアントに送信
response.addCookie(c);
Claire IntのすべてのCookieを取得
Cookieをインポートする場合は、すべてのCookieを配列にインポートする必要があります.
Cookie[] allcookies = request.getCookies();
クライアントから取得したCookieの名前と値を取得
名前:allcookies[i].getName()
値:allcookies[i].getValue()
コーディングとデコード
CookieにはAskiコード(アルファベット、数字)しか含まれません.ハングルにはエンコードとデコードが必要です
String変数=URLEncoder.Encode(値、符号化名);
String変数=URLDecoder.decode(値、符号化名);
Cookie実習
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Date d = new Date();
Cookie c = new Cookie("cookieTest", URLEncoder.encode("JSP프로그래밍입니다.", "utf-8"));
//쿠키 객체 생성. 쿠키 이름은 cookieTest. 쿠키내용은 한글을 utf-8로 인코딩해서 저장.
c.setMaxAge(24 * 60 * 60); //쿠키의 유효기간 생성.
//c.setMaxAge(-1); //세션 쿠키를 생성할 경우.
response.addCookie(c); // 생성된 쿠키를 브라우저로 전송해줌.
out.println("현재시간 : " + d);
out.println("<br> 문자열을 Cookie에 저장합니다.");
}
SetCookie SublitCookieジェネレータはCookieに名前と値を入力します.
韓国語はutf-8と符号化する必要があるため、URLEncoderを使用します.
Cookie有効期間が指定されていない場合は、セッションCookieとなります.
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
Cookie[] allValues=request.getCookies(); //브라우저의 쿠키값 배열로 전달받음.
for(int i=0; i<allValues.length;i++){
if(allValues[i].getName().equals("cookieTest")){ //해당 쿠키의 이름이 cookieTest인 것의 값 출력
out.println("<h2>Cookie 값 가져오기 : "+URLDecoder.decode(allValues[i].getValue(),"utf-8"));
}
}
}
GetCookie ServletブラウザのCookieを配列としてインポートし、特定の名前のCookieを検索して値を出力します.
セッション
Cookieは共有情報をクライアントPCに格納する.
セッションは、ガラス->ログインなどのセキュリティ面でサーバメモリに格納されます.
セッション順序
すなわち、サーバ上の各セッションオブジェクトは、初期設定の同じ変数名として格納される.user,user pw.
JSSIONIDという名前のセッションCookieを使用してセッションを区切ります.
サーバからクライアントセッションをインポート
Httpseesion session = request.getSession();
->クライアント上のセッションが存在する場合は、セッションオブジェクトをに設定します.存在しない場合は、新しいセッションオブジェクトを作成して返します.
request.getSession(false);
->セッションが存在する場合は、セッションオブジェクトを選択します.存在しない場合はnullを返します
最初に作成されたセッションかどうか:session.isNew()
セッションにバインド
Httpsessionオブジェクトは、サーブレットContextオブジェクトのようにバインドして使用することもできます.
setAttributeまたはgetAttributeメソッドの使用
セッションIDとアクセス視点の取得
セッションID:セッション.getId()
初期セッションオブジェクトが作成された時刻:new Dateセッション.getCreateTime()
最後のセッションアクセス時間:new Date session.getLastAccessedTime()
セッションオブジェクト有効時間:session.getMaxInactiveInterval()
セッションを完全に削除
session.invalidate();
セッションを使用したログインの実装
isExisted結果がTrueの場合、
/*Login Servlet*/
private void doHandle(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String user_id = request.getParameter("user_id");
String user_pwd = request.getParameter("user_pwd");
MemberVO memberVO = new MemberVO();
memberVO.setId(user_id);
memberVO.setPwd(user_pwd);
MemberDAO dao = new MemberDAO();
boolean result = dao.isExisted(memberVO); //dao에서 쿼리문 수행
if (result) {
HttpSession session = request.getSession(); //세션 생성
session.setAttribute("isLogon", true); // 로그인 정보 바인딩
session.setAttribute("login.id", user_id);
session.setAttribute("login.pwd", user_pwd);
out.print("<html><body>");
out.print("안녕하세요 " + user_id + "님!!!<br>");
out.print("<a href='show'>회원정보보기</a>"); //회원 정보 조회 서블릿으로
out.print("</body></html>");
}
/*정보 조회 서블릿*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String id ="", pwd="" ;
Boolean isLogon=false;
HttpSession session = request.getSession(false); //세션이 있는지 확인
if( session != null){ // 있다면 세션에 바인딩 된 정보 출력
isLogon=(Boolean)session.getAttribute("isLogon");
if(isLogon==true){
id = (String)session.getAttribute("login.id");
pwd = (String)session.getAttribute("login.pwd");
out.print("<html><body>");
out.print("아이디: " + id+"<br>");
out.print("비밀번호: " + pwd+"<br>");
out.print("</body></html>");
}else{
response.sendRedirect("login3.html");
}
}else{
response.sendRedirect("login3.html");
}
}
Reference
この問題について([Web]Cookieとセッション), 我々は、より多くの情報をここで見つけました https://velog.io/@kiwonkim/Web-쿠키와-세션テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol