세션 및 쿠키 및 JSESSIONID

6428 단어
cookie.setMaxAge(30 * 24 * 60 * 60);//30일 저장//cookie.setDomain(".baidu.com");//    cookie.setPath("/");//  cookie.setDomain(".0.0.1");//  cookie.setDomain(request.getHeader("host"));//    cookie.setPath("/");//자바스크립트를 사용하면 HttpOnly=true의 쿠키를 읽을 수 없고 안전성이 높습니다//쿠키에 HttpOnly 속성을 설정하면 js 스크립트를 통해 쿠키 정보를 읽을 수 없습니다. 그러면 XSS 공격을 효과적으로 방지할 수 있습니다//js가 쿠키 정보를 읽을 수 없지만 서버 측은 자바 언어로 쿠키 정보를 읽을 수 있습니다.setHttpOnly(true);
response.addCookie(cookie);//쿠키 써.
%>
//쿠키의 도메인(setDomain)과 경로(setPath)를 설정하고 다른 웹 애플리케이션에 쿠키를 설정하고//쿠키 테스트쿠키 = new 쿠키("test", "테스트Domain AndPath")javascript를 사용하여 HttpOnly=true의 쿠키를 읽을 수 없으며 안전성이 높습니다//쿠키에 HttpOnly 속성을 설정하면 js 스크립트를 통해 쿠키 정보를 읽을 수 없으며 XSS 공격//testCookie를 효과적으로 방지할 수 있습니다.setHttpOnly(true);//  testCookie.setDomain("");//  testCookie.setPath("");//브라우저에 jsessionid를 수동으로 쿠키(각 브라우저가 JSESSIONID를 덮어쓰는지 또는 2개의 JSESSIONID가 있는지 테스트)//쿠키 쿠키 2 = new 쿠키("JSESSIONID", "test360731")를 설정합니다.Cookie cookie2 = new Cookie("JSESSIONID", session.getId()); /* 테스트 결과 브라우저를 여는 경우(브라우저를 닫지 않음) 2분 동안 브라우저가 서버와 상호작용하지 않으면 이름이 JSESSIONID인 쿠키가 자동으로 효력을 상실하기 때문에 2분 후에 브라우저가 서버에 다시 요청을 보낼 때 요청 헤더에 있는 이 JSESSIONID라는 쿠키가 효력을 상실하였습니다.즉, 요청 헤더에 이 JSESSIONID라는 쿠키를 서버에 보내지 않는다(즉 브라우저에 이미 JSESSIONID가 없다). 그 서버는 당연히 어느 클라이언트(브라우저)가 요청한 서버인지 분간할 수 없다. 서버에서sessionid가 브라우저 요청에서 보낸 JSESSIONID와 일치하지 않기 때문이다.서버 쪽의sessionid는 브라우저에서 JSESSIONID라는 쿠키와 일치한다고 말하지 마라. 브라우저가 2분이 넘도록 서버와 상호작용을 하지 않은 상황에서 브라우저에서 JSESSIONID라는 쿠키는 이미 효력을 잃었다. 2분 후에 브라우저가 다시 서버를 요청할 때 브라우저에서 JSESSIONID라는 쿠키는 모두 효력을 잃었다. 브라우저가 서버를 요청하는 과정에서요청 헤더에 JSESSIONID라는 쿠키를 서버에 데리고 가지 않기 때문에 2분 안에 브라우저가 서버와 상호작용을 하지 않고 2분 후에야 브라우저가 서버에 다시 요청을 해서 상호작용을 한다면 서버 측은 브라우저에 새로운sessionid를 써서 JSESSIONID라는 쿠키에 *////* 많은 브라우저가 JSESSIONID라는 쿠키의 기본 MaxAge와 같다 - 1즉, 브라우저를 닫으면 JSESSIONID라는 쿠키가 효력을 상실하기 때문에 많은 사이트에서 로그인을 했지만 브라우저를 닫고 다시 브라우저를 열어 방금 로그인한 사이트를 방문하면 다시 로그인을 요구한다. 사실은 JSESSIONID라는 쿠키의 기본 MaxAge는 -1과 같기 때문이다. 만약에 자신이 개발한 프로젝트에서 사용자가 브라우저에서 당신의 웹 응용 프로그램에 로그인했다면,그러나 사용자가 브라우저를 닫았을 때 사용자가 브라우저를 다시 열어 웹 응용 프로그램에 방문하면 다시 로그인해야 한다는 것을 발견하면 사용자는 반감을 느낄 것이다. 만약에 이 문제를 해결하고 싶다면 이런 쓰기 방법을 사용해서 쿠키 쿠키 2 = new 쿠키('JSESSIONID',session.getId()'를 사용할 수 있다.cookie2.setMaxAge(24 * 60 * 60);//24시간 Response를 저장합니다.addCookie(cookie2); 하지만 저는 여러분께 쿠키2를 일깨워 드리고 싶습니다.setMaxAge(24 * 60 * 60);이 말은 MaxAge 시간을 설정할 때 너무 크게 설정하지 마세요. PC방 등 공공장소에서 브라우저로 웹 앱에 로그인한 후에 브라우저를 끄고 내리거나 자리를 떠납니다. 다른 사람들은 당신의 컴퓨터를 사용하고 브라우저를 켜고 방금 방문한 웹 앱을 엽니다. 이 웹 앱의 JSESSIONID라는 쿠키의 MaxAge가 아직 기한이 지나지 않았다면그러면 다른 사람들은 당신이 방금 로그인한 계정을 계속 사용하여 이 웹 응용 프로그램을 방문하고 조작할 수 있습니다. 그러면 당신의 계정은 다른 사람이 불법으로 조작하고 사용해서 당신의 손실을 초래할 수 있습니다. 만약에 브라우저의 이름이 JSESSIONID라면 JSESSIONID의 값은 AECE15RYHN의 쿠키와 같고 서버 쪽의sessionid는 AECE15RYHN의session 대상이 기한을 초과했습니다.그 브라우저가 이 웹 프로그램에 다시 접근할 때 다시 로그인해야 합니다(당연하죠. 클라이언트 브라우저의 JSESSIONID라는 쿠키는 요청 헤더에 서버의sessionid와 일치해야 합니다. 그렇지 않으면 서버가 어느 클라이언트 브라우저가 보낸 요청을 어떻게 알고 분별하는지 알 수 없습니다. 다시 말하면 브라우저의 JSESSIONID는 서버의sessionid와 같아야 서버가 당신이 어느 클라이언트 브라우저인지 알 수 있습니다. 만약에 브라우저의 이름이 JSE라면SSIONID의 쿠키는 기한이 지나지 않았고 서버의session의sessionid는 기한이 지났습니다. 그 브라우저의JSESSIONID라는 쿠키는 서버의sessionid와 일치하지 않습니다. 그 사용자는 웹 응용 프로그램에 다시 로그인해야 하기 때문에 브라우저의JSESSIONID라는 쿠키는 서버의sessionid와 함께 사용해야 완전한 세션 과정을 형성할 수 있습니다. 하나 빠지면 안 됩니다. 그리고 여러분의 주의가 필요합니다.서버 쪽의sessionid의 만료 시간은 스스로 설정할 수 있습니다. 서버에서session 세션의 만료 시간은 모두가 알고 있습니다. 여기는 제가 더 이상 군말하지 않겠습니다!그래서 여러분은 일부 공공장소에서 인터넷에 접속할 때 브라우저를 사용하여 일부 사이트에 로그인했습니다. 만약에 이런 사이트를 사용하지 않으려면 브라우저를 사용하여 모든 쿠키를 제거하고 다른 사람이 당신이 자리를 떠난 후에 다른 사람이 당신의 계정을 불법으로 사용해서 조작하는 것을 방지하는 것이 좋습니다. 특히 인터넷 뱅킹, 알리페이 등 자금과 재산과 관련된 일부 웹 사이트는 모두 반드시 안전 의식을 높여 재산 손실을 피해야 합니다!)*//테스트 브라우저가 닫힌 후 2분 동안 효력을 상실하거나 브라우저가 닫히지 않은 상태에서 2분 동안 아무런 조작도 하지 않으면 효력을 상실한다/* 테스트를 거치면 화성 브라우저와 IE(버전 IE11) 브라우저는 닫지 않은 상태에서 쿠키가 맥스에이지(만료 시간)를 초과하면 쿠키는 즉시 효력을 상실하지만 구글 브라우저는 닫지 않은 상태에서 쿠키가 맥스에이지(만료 시간)를 초과하면 쿠키는 즉시 효력을 상실하지 않는다.구글 브라우저가 브라우저를 닫지 않는 상황에서 쿠키는 맥스 에이지(만료 시간)를 초과하면 쿠키도 즉시 효력을 상실한다. 그러나 재미있는 것은 내 관찰을 통해 구글 브라우저에 JSESSIONID 2부, 새로운 JSESSIONID 1부, 그리고 기한이 지난 JSESSIONID*/*가 이상한 문제가 있다는 것을 발견했다. 나는 분명히 JSESSIONID라는 쿠키의 맥스 에이지(만료 시간)를 2분, 만료 시간)로 설정했다.왜 브라우저에서 서버로 전송되었을 때 저는 JSESsionid라는 쿠키를 출력한 MaxAge가 -1이 되었습니다. 뿐만 아니라 브라우저에서 서버로 전송된 모든 쿠키의 MaxAge의 값은 -1*/cookie2입니다.setMaxAge(2 * 60);//2분간 저장(브라우저가 닫힌 후 JSESSIONID라는 쿠키가 곧 효력을 상실하는지 확인하기 위해)response.addCookie(cookie2);//쿠키 써.
%>
testCookie.jsp







  Cookie,Cookie      






	

Cookie,Cookie

:" + df.format(now) + ""); out.print("sessionId=" + session.getId() + "
"); out.print(" :" + session.getAttribute("myName") + "
"); %>
"); if(cookies != null){ out.print("
"); out.print("

Cookie :

"); Cookie sCookie = null; out.print("cookies =" + cookies.length + "

"); for (int i = 0; i < cookies.length; i++) { // Cookie sCookie = cookies[i]; // Cookie if (sCookie != null) { // if (("cookieName").equals(sCookie.getName())) { // pageContext.setAttribute("SavedUserName", sCookie.getValue()); // } String str = "♥     "; out.print(str + sCookie.getName() + " = " + sCookie.getValue() + " /MaxAge=" + sCookie.getMaxAge() + " /Version=" + sCookie.getVersion() + "

"); if("zhangsan".equals(sCookie.getValue())){ Cookie myCookie = new Cookie("message", "hello my name is zhangsan"); myCookie.setMaxAge(30 * 24 * 60 * 60); // 30 response.addCookie(myCookie); // COOKIE }else if("lisi".equals(sCookie.getValue())){ Cookie myCookie = new Cookie("message", "hello my name is lisi"); myCookie.setMaxAge(30 * 24 * 60 * 60); // 30 response.addCookie(myCookie); // COOKIE } } } out.print("
"); } %>

좋은 웹페이지 즐겨찾기