최근에 나는 책 구매 웹 사이트를 작성하고있었습니다. 로그 아웃 함수를 테스트하고 브라우저를 클릭하여 브라우저를 새로 고치기 위해 반환하면 이미 로그인 한 사용자가 다시 로그인 한 것으로 나타났습니다.
오랫동안 생각한 후 온라인에서 많은 솔루션을 찾았지만 온라인에서 제공되는 대부분의 방법은 JS를 사용하여 로그 아웃하고 사용자가 브라우저를 클릭하여 반환하는 것을 금지하는 것입니다.
이 방법은 가능하지만 실제로이 문제를 배경에서 해결하지는 않습니다. 신사를 지키는 것처럼 느껴지지만 악당은 아닙니다.
다음은 당신이 구현 한 방법입니다
원칙:
로그 아웃 후 브라우저를 클릭하여 브라우저를 새로 고치십시오. 실제로 브라우저는 원래 양식 양식의 정보를 재개합니다.
로그 아웃한다는 것은 원래 세션을 죽이는 것을 의미합니다
// private void logout (httpservletrequest request, httpservletresponse responsk)를 로그 아웃합니다. servletexception, ioexception {httpsession session = request.getSession (); request.setattribute ( "sessionId", session.getId ()); session.removeattribute ( "사용자"); session.invalidate (); response.sendRedirect (request.getContextPath () + "/index.jsp"); } 로그 아웃 후 JSP 페이지로 리디렉션되면 생성 된 세션은 원래 세션과 다릅니다 (JSP 페이지의 세션은 기본적으로 활성화됩니다).
즉, 로그 아웃 후 브라우저를 클릭하여 세션을 새로 고치기 위해 돌아가는 것은 새로운 세션입니다. 이러한 관점에서 솔루션에 대해 생각해보십시오.
원래 세션에 데이터를 넣었습니다. 로그인했을 때 처음 으로이 데이터를 얻을 수 있습니다. 로그 아웃 후 원래 세션이 사라졌습니다. 브라우저를 클릭하여 새로 고침으로 돌아갑니다. 새 세션에는 데이터가 없습니다. 획득 된 값은 NULL입니다
원래 세션의 데이터를 새 세션 값과 일치시킵니다. 하나는 값이 있고 다른 하나는 널입니다. 일치하는 것은 확실히 실패 할 것입니다. 현재 사용자 친화적 인 프롬프트를 제공하고 사용자가 다시 로그인하도록 할 수 있습니다.
그렇다면 로그 아웃 후 원래 세션의 데이터를 어떻게 저장할 수 있습니까 (원본 세션이 취소되면 사라질 것입니다)? 숨겨진 도메인을 양식에 추가하고 원래 세션에 숨겨진 도메인에 데이터를 넣으십시오. 로그 아웃 후 브라우저를 클릭하여 새로 고침으로 돌아갑니다. 브라우저는 직접 저장하지 않고 원래 세션에서 데이터를 자동으로 제출합니다 (실제로 수동 저장은 ServletContext 응용 프로그램 컨텍스트에 배치해야 할 수도 있습니다.
양식의 반복 제출에 대한 솔루션과 약간 유사하지만, 동일한 세션이 로그 아웃 전후에 동일한 세션이 아니기 때문에 원래 세션의 데이터를 제거 할 수 없습니다.
세부 사항은 다음과 같습니다. login.jsp
<%string token = new random (). nextLong ()+""; session.setAttribute ( "token", token);%> <form action = "$ {pagecontext.request.contextpath}/servlet/clientservlet? 작동 ="post "> <table> <trign = <td> <name"> name : type = "text"name = "name"> </td> </tr> <tr> <td align = "right"> password : </td> <td> <입력 유형 = "password"= "password"> </td> </tr> <tt> <td> </td> <td> <input type = "value ="login "> td> </td> </td> </td> type = "hidden"name = "token"value = "$ {sessionscope.token}"> </form> 서블릿에서 친근한 프롬프트를 제공하고 로그인 페이지로 리디렉션하십시오.
httpsession session = request.getSession (); // 로그인 한 후 브라우저의 반복적 인 로그인 문제를 해결하고, 숨겨진 입력 필드를 제공하고, 배경에서 숨겨진 도메인의 값을 얻습니다. // 로그 아웃 후 브라우저를 새로 고침하여 새 세션이 생성되므로 세션은 null // so hiddentoken.equals (string)으로 얻어야합니다. 문자열 hiddentoken = request.getParameter ( "토큰"); if (! hiddentoken.equals (sessionToken)) {request.setAttribute ( "message", "로그 아웃하고 로그인하고 다시 로그인하고 2 초 후 로그인 페이지로 돌아가 <meta http-equiv = 'Refresh'Content = 2; url =" + request.getContextPath () + "/client/login.jsp>"); request.getRequestDispatcher ( "/client/message.jsp"). FORMAR (요청, 응답); 반품; } 시험:
로그인하십시오
로그 아웃 후 브라우저를 클릭하여 새로 고침으로 돌아갑니다. 브라우저는 데이터를 재현 할 것인지 프롬프트합니다.
재현하려면 클릭하십시오
이렇게하면 브라우저를 클릭하여 사용자를 새로 고침하여 로그 아웃 후 다시 로그인하는 문제가 해결됩니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.