상기 내용은 프론트엔드 기준이고, 백엔드 기준으론 차이가 없음.
join 메서드 - 배열을 문자열로 묶기
네이버에서 간편로그인 후 다른 앱 넘어가도 그대로 연결 되는 이유 : 쿠키를 하위 도메인끼리 연결시켰기 때문에 되는 것
보안에 좋지 않지만 모바일은 쿠키 사용 비중이 높음(손에서 안놓으니까)
웹사이트 방문자 컴퓨터에 데이터를 저장해 놓는 텍스트 파일
지정된 시간동안은 브라우저를 재실행해도 데이터가 삭제되지 않으며, 사이트 내의 모든 페이지에서 읽기/수정/삭제가 가능한 전역변수가 됨.
개발자 도구의 애플리케이션 탭을 참고하자.
(팁 : Ajax는 network 탭을 자주본다.)
_ok UI 없음
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true"%>
<%
// 쿠키값을 저장할 문자열
String isPopup = null;
// 저장된 모든 쿠키 목록을 배열로 가져온다.
Cookie[] cookies = request.getCookies();
// 쿠키 목록이 있다면?
if (cookies != null) {
// 가져온 배열의 길이만큼 반복
for (int i = 0; i < cookies.length; i++) {
// i번째 쿠키의 이름을 취득한다.
String cookieName = cookies[i].getName();
// 이름이 내가 원하는 값일 경우 복사한다.
if (cookieName.equals("is_popup")) {
// 쿠키값을 취득한다.
String value = cookies[i].getValue();
// 저장된 값의 문자열 길이가 0보다 크다면?
if (value.length() > 0) {
// 인코딩 된 값이므로 디코딩 처리하여 원래값으로 복원한다.
isPopup = URLDecoder.decode(value, "UTF-8");
}
}
}
}
%>
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello JSP</title>
</head>
<body>
<h1>팝업창 열기</h1>
<%
if (isPopup == null) {
%>
<script type='text/javascript'>
// javascript 팝업창 열기
var popup = window.open('child.jsp', 'child-win',
'width=350, height=300');
if (!popup) {
alert("팝업창을 허용해주세요.");
}
</script>
<%
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello JSP</title>
</head>
<body>
<h1>팝업창</h1>
<p>opener.jsp에 의해서 열려진 팝업창 입니다.</p>
<form method="post" action="child_close.jsp">
<label> <input type="checkbox" name="is_popup" value="Y"> 1분간 창 열지 않음 </label>
<button type="submit">닫기</button>
</form>
</body>
</html>
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%
// 파라미터의 문자열 셋을 설정한다. (페이지 상단에서 최초 1회)
request.setCharacterEncoding("UTF-8");
// 같은 이름의 체크박스가 하나인 경우는 일반 파라미터와 처리가 동일하다.
// 체크박스가 선택되었다면 value 속성의 "Y"가 전달될 것이고,
// 선택되지 않았다면 null 이 된다.
String isPopup = request.getParameter("is_popup");
// 체크박스가 선택되었다면 60초의 유효시간을 갖는 is_popup이라는 이름의 쿠키를 생성한다.
if (isPopup != null) {
/** 전송된 값이 있는 경우 저장 (혹은 덮어쓰기) */
String enc = URLEncoder.encode(isPopup, "UTF-8"); // 저장할 값에 대한 URLEncoding
Cookie info = new Cookie("is_popup", "UTF-8"); // 쿠키 생성 (이름, 값 설정)
info.setMaxAge(60); // 쿠키의 유효시간(초) - 지정하지 않을 경우 브라우저를 닫으면 즉시 삭제
info.setPath("/"); // 쿠키가 유효한 경로 설정 - 사이트 최상단 디렉토리 지정(사이트 전역에서 유효)
info.setDomain("localhost"); // 쿠키가 유효한 도메인 설정 --> 상용화시에는 사이트에 맞게 도메인으로 수정해야함
response.addCookie(info); // 쿠키 저장하기
}
%>
<script type="text/javascript">
window.close(); // javascript 현재 창 닫기
</script>
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello JSP</title>
</head>
<body>
</body>
</html>
쇼핑몰 결제페이지 흐름을 생각해보자.
Meta 태그를 사용하여 히스토리에도 남기지 않고, 알림도 띄울 수 있다.
memo
sendRedirect - 기록이 안남고 출력이 안됨
A B C 페이지 있음
A - 결제 UI => B로 넘김(카드사 결제 처리) UI가 없음 => C 완료(뒤로가기시 A로 가야함, B로 가면 중복결제되니까)
알림창으로 계속 알려주면 좋음(한국사이트는 다 이렇게 해줌, 흐름 끊김)
B페이지가 히스토리에 남으면 안됨.
알림(alert) 뜬다는건 출력이 되는거임.
그 두가지는 meta태그만 가능함.
sendredirect : 히스토리에 안남지만 출력 불가능
자바스크립트 : 출력 가능, 히스토리에 남음