>  기사  >  웹 프론트엔드  >  쿠키를 비활성화하고 브라우저를 닫은 후 세션 및 쿠키 파괴 문제를 해결하는 방법

쿠키를 비활성화하고 브라우저를 닫은 후 세션 및 쿠키 파괴 문제를 해결하는 방법

零下一度
零下一度원래의
2017-05-18 11:54:545585검색

쿠키와 세션은 일반적으로 두 가지 독립적인 것으로 간주됩니다. 세션은 서버 측에서 상태를 유지하는 솔루션을 사용하는 반면 쿠키는 클라이언트 측에서 상태를 유지하는 솔루션을 사용합니다. 그런데 쿠키를 비활성화하면 왜 세션을 얻을 수 없나요? 세션은 세션 ID를 사용하여 현재 대화에 해당하는 서버 세션을 결정하고, 세션 ID는 쿠키를 통해 전달되므로 쿠키를 비활성화하는 것은 세션 ID를 잃는 것과 같으므로 세션이 손실됩니다.

쿠키를 비활성화하는 방법은 무엇입니까?

1. IE를 시작합니다.
2. "도구" 메뉴에서 "인터넷 옵션"을 클릭하여 "인터넷 옵션" 대화 상자를 엽니다.
3. "개인정보"를 클릭합니다. ' 탭을 클릭하고 슬라이더를 더 높은 개인정보 보호 수준으로 이동하세요. 상단으로 이동하면 "모든 쿠키 차단"을 선택하세요. 이때 시스템은 모든 웹사이트의 쿠키를 차단하며, 웹사이트는 귀하의 컴퓨터에 있는 기존 쿠키를 읽을 수 없습니다.
 4. "확인" 버튼을 클릭하세요.

sessionid는 쿠키에 저장되며, 해결 방법은 다음과 같습니다.
세션 URL 다시 쓰기 클라이언트가 COOKIE를 비활성화하거나 지원하지 않는 경우 여전히 Session

세션 메커니즘을 사용할 수 있습니다. 세션 메커니즘은 서버측 메커니즘으로, 서버는 정보를 저장하기 위해 해시 테이블과 유사한 구조를 사용합니다(또는 해시 테이블을 사용할 수도 있음).

프로그램이 클라이언트 요청에 대한 세션을 생성해야 할 때 서버는 먼저 클라이언트 요청에 이미 세션 식별자(세션 ID라고 함)가 포함되어 있는지 확인합니다. 이 클라이언트는 세션을 생성했으며 서버는 세션 ID에 따라 세션을 검색합니다(검색할 수 없는 경우 새 세션을 생성합니다). 클라이언트용으로 생성되며 세션과 연결된 세션 ID는 반복되지 않으며 쉽게 찾아 복사할 수 없는 문자열이어야 합니다. 이 세션 ID는 마지막에 저장하여 클라이언트에 반환됩니다. 이 세션 ID를 저장하는 방법은 쿠키를 사용할 수 있으므로 상호 작용 프로세스 중에 브라우저가 규칙에 따라 이 ID를 서버에 자동으로 표시할 수 있습니다. 일반적으로 이 쿠키의 이름은 SEEESIONID와 유사합니다. 그러나 쿠키는 인위적으로 비활성화될 수 있으며 쿠키가 비활성화된 경우 세션 ID를 서버에 다시 전달하는 다른 메커니즘이 있어야 합니다. 자주 사용되는 기술은 URL 재작성이라고 하며, URL 경로 끝에 세션 ID를 직접 추가합니다. Form Hidden Field라는 기술도 있습니다. 즉, 서버는 자동으로 양식을 수정하고 양식이 제출될 때 세션 ID가 서버로 다시 전달될 수 있도록 숨겨진 필드를 추가합니다.

[URL 재작성 예시]

package session;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class WelcomeServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        request.getSession();

        String url1 = response.encodeURL("/Session/servlet/SessionDemo1");//禁用cookie才重写,注意禁用cookie后,访问要用127.0.0.1,不能用localhost
        String url2 = response.encodeURL("/Session/servlet/SessionDemo2");        //禁用cookie之后无法解决关闭浏览器能重新访问的问题。
        out.println("<a href=&#39;"+url1+"&#39;>购买  </a>");
        out.println("<a href=&#39;"+url2+"&#39;>结账</a>");
    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}
rrree

URL 주소 재작성은 쿠키를 지원하지 않는 클라이언트를 위한 솔루션입니다. URL 주소 재작성 원칙은 사용자의 세션 ID 정보를 URL 주소에 재작성하는 것입니다. 서버는 다시 작성된 URL을 구문 분석하여 세션 ID를 얻을 수 있습니다. 이렇게 하면 클라이언트가 Cookie를 지원하지 않더라도 Session을 이용하여 사용자의 상태를 기록할 수 있습니다. HttpServletResponse 클래스는 URL 주소 재작성을 구현하기 위해 encodeURL(문자열 url)을 제공합니다. 이 메소드는 클라이언트가 쿠키를 지원하는지 자동으로 결정합니다. 클라이언트가 쿠키를 지원하는 경우 URL은 그대로 출력됩니다. 클라이언트가 쿠키를 지원하지 않으면 사용자의 세션 ID가 URL에 다시 작성됩니다.

참고: TOMCAT은 요청에 쿠키가 포함되어 있는지 여부에 따라 클라이언트 브라우저가 쿠키를 지원하는지 여부를 결정합니다. 클라이언트는 쿠키를 지원할 수 있지만 첫 번째 요청에서는 쿠키를 전달하지 않습니다. > (운송할 쿠키가 없기 때문에) 다시 작성한 후에도 URL 주소에는 여전히 JSESSIONID가 포함됩니다. 두 번째로 접속할 때 서버는 이미 브라우저에 쿠키를 작성했기 때문에 다시 작성한 후의 URL 주소에는 JSESSIONID가 포함되지 않습니다. [관련 추천]


1.

Js 쿠키 동작(설정, 읽기, 삭제) 예시에 대한 자세한 설명

2. 쿠키란 무엇인가요? 쿠키는 무엇을 위해 사용됩니까?

위 내용은 쿠키를 비활성화하고 브라우저를 닫은 후 세션 및 쿠키 파괴 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.