⚡ 자동로그인 체크시 localStorage 저장
로그인을 한 상황에서 해당 페이지를 강제로 url접속시 자동으로 메인페이지로 이동을 하는 상황을 재현
-login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
HttpSession hs = request.getSession();
String mid = (String)hs.getAttribute("mid");
if(mid != null){
//out.print("<script>location.href='http://nate.com';</script>");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
<form id="frm_login" onsubmit="return logins()">
<input type="text" name="mid"><br>
<input type="password" name="mpass"><br><br>
<input type="checkbox" name="autologin" value="Y">자동로그인
<button>로그인</button>
</form>
</body>
<script>
function logins(){
frm_login.method = "post";
frm_login.action = "./loginok.do";
if(frm_login.autologin.checked == true){
if(confirm("pc방 및 공공장소에서는 자동로그인을 권장하지 않습니다.")){
frm_login.submit();
}else{
return false;
}
}else{
frm_login.submit();
}
}
//자동로그인을 체크 후 해당 웹페이지 재접속
var id= localStorage.getItem("mid");
var pass= localStorage.getItem("mpass");
var ck= localStorage.getItem("autologin");
if(id!=null && pass!=null && ck!=null){
frm_login.mid.value = id;
var sp = pass.split("/");
if(sp[1] == "auto"){
frm_login.mpass.value = sp[0];
frm_login.autologin.checked = true;
frm_login.submit();
}
}
</script>
</html>
button에 type이 없을 경우 submit
전송 방식은 get, SPA형태로 페이지가 이동됨
- loginok.java (servlet) login session 처리 및 storage 형태
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String mid = request.getParameter("mid");
String mpass = request.getParameter("mpass");
String autologin = request.getParameter("autologin");
PrintWriter pw = response.getWriter();
HttpSession hr = request.getSession();
if(autologin==null) { //자동 로그인을 안 한 경우
hr.setAttribute("mid", mid);
}else {
hr.setAttribute("mid", mid);
//원래는 암호화해서 작업
String repass = mpass + "/auto";
pw.write("<script>"
+ "localStorage.setItem('mid','"+mid+"');"
+ "localStorage.setItem('mpass','"+repass+"');"
+ "localStorage.setItem('autologin','"+autologin+"');"
+ "alert('로그인 하셨습니다'); location.href ='./main.jsp';"
+ "</script>");
}
}
-main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
HttpSession hs = request.getSession();
Object mid = hs.getAttribute("mid");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인페이지에서 자동로그인 해제</title>
</head>
<body>
<%=mid %>님 환영합니다. <br>
<a href="javascript:void storage()">[자동로그인 해제]</a>
<a href="javascript:void logout()">[로그아웃]</a>
</body>
<script>
function storage(){
//localStorage.clear() : 얘는 모든 storage를 몽땅 삭제해버림.. 꼭필요할때만 사용할것
localStorage.removeItem("mid"); //특정 storage값만 삭제
localStorage.removeItem("mpass");
localStorage.removeItem("autologin");
alert("자동 로그인을 해제 하셨습니다.");
location.href="./login.jsp";
}
function logout(){
location.href = "./logout.jsp";
}
</script>
</html>