Cookie and Session
Cookie and Session
HTTPプロトコルで通信しているページ間では何の情報共有もありません.
ステータスまたは情報を共有するには、세션 트래킹
のWeb接続機能を実装する必要があります.
1.非表示ラベル:非表示ラベルの使用
<input type="hidden" name="user_address" value="서울시 성북구" />
<input type="hidden" name="user_email" value="[email protected]" />
<input type="hidden" name="user_hp" value="010-111-2222" />
2.URL書き換え:get方式でURLの後ろに貼り付けて使用
user_address = URLEncoder.encode(user_address, "utf-8");
out.print("<a href='/pro09/second?user_id=" + user_id
+ "&user_pw=" + user_pw
+ "&user_address=" + user_address
+ "'>두 번째 서블릿으로 보내기</a>");
3.Cookieの使用
Cookieは、Webページの共有情報をクライアントに格納し、必要に応じて複数のWebページを
高融点の使い方.
<input type="hidden" name="user_address" value="서울시 성북구" />
<input type="hidden" name="user_email" value="[email protected]" />
<input type="hidden" name="user_hp" value="010-111-2222" />
user_address = URLEncoder.encode(user_address, "utf-8");
out.print("<a href='/pro09/second?user_id=" + user_id
+ "&user_pw=" + user_pw
+ "&user_address=" + user_address
+ "'>두 번째 서블릿으로 보내기</a>");
CookieにはPersistence CookieとSession Cookieがあります.
Persistence Cookie
ファイルとして作成し、Cookieを削除するかCookie設定値を終了すると終了します.
また、最初の接続時にサーバに送信して、ログインとポップアップウィンドウの有無を制限することもできます.
Session Cookie
ブラウザメモリに作成し、ブラウザが終了したときに一緒に終了します.
最初の接続時にサーバに送信されず、サイト接続時にセッション認証情報の維持に使用されます.
サーブレット使用Cookie
ファイル記憶方式
//set
Date d = new Date();
//Cookie 객체를 생성한후 한글 정보를 인코딩해서 쿠키에 저장
Cookie c = new Cookie("cookieTest", URLEncoder.encode("what프로그래밍입니다.", "utf-8"));
//유효 기간을 설정
c.setMaxAge(24*60*60);
//생성된 쿠키 브라우저도 전송
response.addCookie(c);
//get
Cookie[] allValues = request.getCookies();
for(int i=0; i<allValues.length;i++){
if(allValues[i].getName().equals("cookieTest")){
out.println("<h2>Cookie 값 가져오기 : " + URLDecoder.decode(allValues[i].getValue(), "utf-8"));
}
}
セッションCookiesetMaxAgent(a)のa値を負に設定すると、セッションCookieが作成されます.
//set
Date d = new Date();
//Cookie 객체를 생성한후 한글 정보를 인코딩해서 쿠키에 저장
Cookie c = new Cookie("cookieTest", URLEncoder.encode("what프로그래밍입니다.", "utf-8"));
//유효 기간을 설정
c.setMaxAge(-1);
//생성된 쿠키 브라우저도 전송
response.addCookie(c);
セッションを使用したWebページの連動
Cookieは、Webページの情報をクライアントに格納し、情報の露出を容易にすることができる.
セッションは、サーバのメモリに情報を作成して格納します.これらのセキュリティ保護が必要な情報のほとんどは、セッションを使用します.また、各ブラウザはセッションを作成します.すなわち、ユーザーごとにセッションを作成します.
再接続すると、サーバはこのセッションCookieを使用してセッションオブジェクトにアクセスし、ブラウザに対して操作を実行します.
HttpSession session = request.getSession();
out.println("세션 아이디 : " + session.getId() + "<br>");
out.println("최초 세션 생성 시각 : " + new Date(session.getCreationTime()) + "<br>");
out.println("최초 세션 접근 시각 : " + new Date(session.getLastAccessedTime()) + "<br>");
out.println("세션 유효 시간 : " + session.getMaxInactiveInterval() + "<br>");
if(session.isNew()){
out.print("새 새션이 만들어졌습니다.");
}
//세션 유효시간 설정
session.setMaxInactiveInterval(5);
//세션 강제 삭제
session.invalidate();
セッションCookieの確認方法Cookieが使用できない場合
Cookieが使用できない場合は、encodeURL()メソッドを使用してセッション機能を有効にできます.
String url = response.encodeURL("login");
out.println("<a href="+url+">로그인 상태 확인 </a>");
セッションログインの使用例
//LoginServlet
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
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");
//VO 객체 생성 및 속성에 값 설정 해주기
MemberVO memberVO = new MemberVO();
memberVO.setId(user_id);
memberVO.setPwd(user_pwd);
System.out.println("memberVO : "+ memberVO);
MemberDAO dao = new MemberDAO();
//memberVO를 dao에 전달
boolean result = dao.isExisted(memberVO);
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>");
}else{
out.print("<html><body><center>회원 아이디가 틀립니다.");
out.print("<a href='login3.html'>다시 로그인 하기 </a>");
out.print("</body></html>");
}
}
}
//MemberDAO
....
public boolean isExisted(MemberVO memberVO) {
boolean result = false;
String id = memberVO.getId();
String pwd = memberVO.getPwd();
try{
con = dataFactory.getConnection();
String query = "select decode(count(*),1,'true','fase') as result from t_member";
query += " where id=? and pwd=?";
pstmt = con.prepareStatement(query);
pstmt.setString(1, id);
pstmt.setString(2, pwd);
ResultSet rs = pstmt.executeQuery();
rs.next();
result = Boolean.parseBoolean(rs.getString("result"));
System.out.println("rsult =" + result);
}catch(Exception e){
e.printStackTrace();
}
return result;
}
Reference
この問題について(Cookie and Session), 我々は、より多くの情報をここで見つけました https://velog.io/@vmelove/Cookie-and-Sessionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol