클라이언트가 서버에 연결을 열고, 요청을 하고, 서버가 클라이언트의 요청에 응답할 때까지의 전체 과정을 세션이라고 합니다.
추천 과정: Java 튜토리얼.
브라우저와 서버 간의 통신은 HTTP 프로토콜을 통해 이루어지며, HTTP 프로토콜은 "상태 비저장" 프로토콜이므로 고객의 정보를 저장할 수 없습니다. 즉, 응답이 완료된 후 연결이 끊어집니다. 다음 요청에는 다시 연결이 필요합니다. 사용자가 동일한 웹사이트의 여러 페이지 간에 전환하는 경우 세션 추적 기술이 이 요구 사항을 충족할 수 있는지 여부를 판단하는 것은 불가능합니다.
Cookie
서버는 요청에 응답할 때 응답 정보를 통해 "키-값" 쌍의 형태로 일부 데이터를 클라이언트에 저장할 수 있습니다. 브라우저가 동일한 애플리케이션에 다시 액세스하면 세션 ID가 포함된 원본 쿠키가 요청 정보를 통해 서버로 전달됩니다. 네트워크 서버는 고유한 세션 ID를 식별하여 각 클라이언트를 나타내며 이를 통해 이 클라이언트 요청의 다음 단계를 식별합니다.
쿠키는 내장 객체가 아니므로 쿠키 인스턴스를 직접 만들어야 합니다. 이는 서버가 클라이언트에 기록하는 텍스트 정보입니다. 이 정보는 수정될 수 있으므로 일반적으로 쿠키는 민감하지 않은 일부 정보를 저장합니다. 클라이언트가 서버에 다시 요청하면 쿠키는 다음과 같이 서버로 전송됩니다. 이 때 서버는 누가 접속하고 있는지 구분할 수 있습니다.
세션 추적에 사용되는 쿠키를 세션 쿠키라고 합니다. Servlet 사양에서 세션 추적을 위한 쿠키 이름은 브라우저 메모리에 저장되는 JSESSIONID여야 합니다.
쿠키는 사용자의 세션 상태를 유지하는 데 사용될 수 있지만, 쿠키 정보가 클라이언트에 저장되어 큰 보안 위험을 초래하며 일반 브라우저에서는 쿠키 수와 데이터 크기에 엄격한 제한이 있습니다. 웹 애플리케이션에서 일반적으로 세션 상태는 HttpSession 개체를 통해 유지됩니다.
Cookie cookie = new Cookie("键", "值"); //创建cookie cookie.setMaxAge(60*60*24); //设置cookie的有效期 cookie.setPath("/"); //设置cookie的有效范围(路径) response.addCookie(cookie); //将cookie写入到客户端
Session
Session은 서버 측에 저장되므로 더욱 안전합니다. 각 사용자는 서로 다른 세션을 가지며, 이는 사용자 간에 공유될 수 없습니다.
세션은 쿠키를 사용합니다. 쿠키가 비활성화되면 세션도 무효화됩니다.
세션 기술은 서버를 통해 상태를 유지하는 서버 측 솔루션입니다. Java에서는 HttpServletRequest의 getSession 메소드를 호출하여 생성됩니다(매개변수로 true 사용). 세션을 생성할 때 서버는 세션에 대한 고유한 세션 ID를 생성하며, 이 세션 ID는 세션이 생성된 후 후속 요청에서 생성된 세션을 다시 얻는 데 사용됩니다. 세션 관련 메서드를 호출하면 콘텐츠가 추가됩니다. 이 내용은 서버에만 저장되며 세션 ID만 클라이언트에 전송됩니다. 클라이언트가 다시 요청을 보내면 이 세션 ID를 가져오고 서버는 해당 세션을 기반으로 찾습니다. 세션 ID를 확인하고 다시 사용하세요. 이러한 프로세스를 공식화함으로써 사용자의 상태가 유지됩니다.
session.setAttribute(String name,Object obj); //往session中存放内容(通过键和值的形式) session.getAtrribute(String name); //通过键从session中获取内容 session.removeAttribute(String name); //把存储在session中的对象移除 session.invalidate(); //销毁session
숨겨진 양식 필드
숨겨진 양식 필드는 HTML의 숨겨진 형식(입력 유형 숨김)에 세션 ID를 추가하는 것입니다. 리디렉션 및 전달
을 통해 정보를 전송합니다. 양식을 통해 서버에 제출되지만 자체적으로 표시되지는 않습니다.
예를 들어, 두 번째 양식은 첫 번째 양식의 내용을 가져오고 첫 번째 양식의 내용을 숨겨진 필드(텍스트 상자 유형은 숨겨짐)로 승인한 후 다시 세 번째 양식에 전달합니다. 일반 용어로 말하면 요청 순서는 양식 1 - - > 양식 2 - - > 양식 3입니다. 그러나 양식 3은 양식 1에서 제출한 콘텐츠를 사용해야 하므로 전환으로 양식 2가 필요합니다. . 콘텐츠는 양식 3으로 전달되기 전에 숨겨진 필드로 저장됩니다.
URL 다시 작성
URL에 세션 ID를 인코딩하세요. 예: counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980 이러한 방식으로 브라우저가 쿠키를 지원하지 않는 경우에도 세션 추적이 가능합니다.
URL 복제의 경우 서버는 요청된 URI에서 세션 ID를 추출하고 요청을 해당 세션과 연결합니다. 그런 다음 세션 데이터에 액세스할 때 JSP 페이지는 세션 ID를 추적하기 위해 쿠키를 사용하는 것과 동일한 방식으로 처리됩니다. 동일한 방법이 사용됩니다. 따라서 세션 구현은 쿠키 또는 URL 복사 기술에 따라 달라집니다.
String sessionId = request.getRequestedSessionId(); //获得sessionId
응답 개체의 encodeURL(StringURL)을 통해 URL 값 다시 쓰기를 구현합니다.
<a href="<%=response.encodeURL("index.jsp") %>"> index页面</a>
이 메서드는 클라이언트가 쿠키를 지원하는지 자동으로 확인합니다. 클라이언트가 쿠키를 지원하는 경우 URL은 그대로 출력됩니다. 클라이언트가 쿠키를 지원하지 않으면 encodeURL() 메서드가 호출되고 사용자의 세션 ID가 자동으로 URL에 다시 작성됩니다. 다시 작성한 후의 출력은 다음과 같습니다.
a href="index.jsp?jsessionid=0E0C61100AEB06DE6A95EB1CD1DA8158">index页面</a>
HttpServletResponse 인터페이스는 URL 다시 쓰기를 위한 두 가지 방법을 정의합니다.
encodeURL 메서드는 하이퍼링크 및 양식 양식의 작업 속성에 설정된 URL을 다시 작성하는 데 사용됩니다.
encodeRedirectURL 메소드는 HttpServletResponse.sendRedirect() 메소드에 전달된 URL을 다시 작성합니다.
요청 메시지에 쿠키 헤더 필드가 포함되어 있는지 여부에 따라 URL을 다시 작성할지 여부를 결정합니다. URL을 이 두 메서드에 매개 변수로 전달하면 URL 재작성을 완료하고 URL 뒤에 jsessionid 매개 변수와 해당 값을 추가할 수 있습니다. 브라우저의 쿠키를 끈 다음 실험을 수행하여 웹 페이지 소스 파일의 URL 뒤에 jsessionid 매개변수와 해당 값이 있는지 확인할 수 있습니다.
위 내용은 JSP/서블릿 세션이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!