쿠키와 세션은 모두 사용자 액세스 상태를 유지하기위한 것입니다. 한편으로는 비즈니스 구현을 용이하게하는 것이며 반면에 서버 프로그래밍을 단순화하고 액세스 성능을 향상시키는 것입니다. 쿠키는 클라이언트 (즉, 브라우저)의 기술입니다. 쿠키를 설정 한 후 서버를 방문 할 때마다 쿠키가 요청됩니다. 세션은 서버에 사용자 액세스 정보를 저장하는 서버의 기술입니다.
쿠키를 사용하여 정보를 제공하십시오. 쿠키 수가 증가하고 방문 횟수가 증가함에 따라 소비하는 대역폭이 커질 것입니다. 세션을 사용하여 정보를 저장할 때 가장 큰 약점은 여러 서버간에 공유하기가 쉽지 않다는 것입니다.
쿠키 1 개
Layman의 용어로는 사용자가 HTTP를 사용하여 서버에 액세스 할 때 서버는 일부 키 값 쌍 정보를 클라이언트 브라우저에 반환하고 이러한 데이터에 일부 제한 사항을 추가합니다. 사용자가 제한을 충족하면 다음에 사용자가 서버에 액세스 할 때 쿠키 키 값 쌍 정보 세트를 이전에 가져옵니다. 사용자가 URL을 입력하면 브라우저는 로컬 하드 드라이브의 URL과 관련된 쿠키를 찾습니다. 쿠키가 존재하면 브라우저는 페이지 요청과 함께 쿠키를 사이트로 보냅니다.
쿠키는 특정 페이지가 아닌 웹 사이트와 관련이 있습니다. 따라서 사이트의 어떤 페이지에 관계없이 브라우저와 서버는 쿠키 정보를 교환합니다. 사용자가 다른 사이트를 방문하면 각 사이트는 쿠키를 사용자의 브라우저로 보낼 수 있습니다. 브라우저는 모든 쿠키를 별도로 저장합니다.
쿠키 속성 항목
쿠키에는 현재 버전 0 및 버전 1이 있습니다. 2 가지 유형의 응답 헤더 식별자, 즉 "Set-Cookie"및 "Set-Cookie2"가 있습니다.
쿠키 0 속성 값
쿠키 1 속성 값
자바에서 쿠키 사용의 예
@OverRidePublic void doget (httpservletrequest 요청, httpservletResponse 응답)은 ioException {response.setContentType ( "text/html; charset = utf-8"); printwriter out = response.getwriter (); getwriter [] cookies = request. == null) {response.addcookie (새 쿠키 ( "이름", "luoxn28");} else {system.out.println (name);} out.println ( "hello world");} public static string getcoodie (쿠키 [] 쿠키, 문자열 키) {if (cookie) {null) {for (null) { (cookie.getName (). Equals (key)) {return cookie.getValue ();}}} return null;}쿠키 사용에 대한 몇 가지 예방 조치 (예로 Java 사용을 취함)
• 생성 된 쿠키의 이름과 가치는 비 인격 캐릭터가 될 수 없습니다. 중국인 인 경우 rrlencoder를 통해 인코딩 할 수 있습니다. 그렇지 않으면 java.lang.ilegalargumentexception 예외가 발생합니다.
• 여러 이름과 값 값이 나타나면 실제로 동일한 "쿠키"헤더에 있습니다.
• 쿠키의 가치는 ";"이외의 구두점 마크를 절약 할 수 있습니다. 그러나 한자는 저장할 수 없습니다. 중국어를 저장할 때 쓰레기가 나타납니다.
쿠키에 대한 일부 제한
쿠키는 HTTP 헤더의 필드입니다. HTTP 자체는이 필드에 제한이 없지만 쿠키는 결국 브라우저에 저장됩니다. 다른 브라우저는 다음 표에서 볼 수 있듯이 쿠키 저장에 약간의 제한이 있습니다.
더 많은 쿠키를 보관하려고하면 가장 오래된 쿠키가 폐기됩니다.
2 세션
세션은 쿠키 수가 증가하면 클라이언트와 서버 간의 데이터 전송량이 증가한다는 문제를 해결합니다. 동일한 클라이언트가 서버와 상호 작용하면 매번 모든 쿠키 값을 전달할 필요는 없지만 ID 값 만 다시 전달됩니다. 이 ID는 클라이언트가 처음으로 서버에 액세스 할 때 생성되며 각 클라이언트는 고유합니다. 이 ID는 일반적으로 이름이 jsessionid 인 쿠키입니다.
쿠키를 기반으로 세션은 어떻게 작동합니까? URL 경로 매개 변수를 기반으로 할 수 있습니다. 쿠키를 기반으로 할 수도 있습니다. 컨텍스트 컨테이너의 쿠키 로고가 수정되지 않은 경우 기본적으로 지원됩니다. 브라우저가 쿠키 기능을 지원하지 않으면 브라우저는 사용자가 요청한 URL 매개 변수로 사용자의 세션 쿠에 이름을 다시 작성합니다. 전달 방법은 /path /servlet; name = xxx; name2 = xxx2? name3 = xxx3과 같은 것입니다. SessionCookEINAME Session-Config 구성 항목이 web.xml에 구성된 경우 쿠키 -Config의 이름 속성은이 SessionCookiename의 값입니다. Session-Config 구성 항목이 구성되지 않은 경우 기본 SessionCookienamejiushi "jsessionId". 세션과 관련된 쿠키는 다른 쿠키와 다르지 않습니다. 클라이언트가 쿠키를 지원하는 경우 Tomcat은 여전히 쿠키의 세션 ID를 구문 분석하고 URL에서 세션 ID를 덮어 씁니다.
세션의 작동 방식
세션 ID를 사용하면 서버는 httpsession 객체를 만들 수 있습니다. 처음으로 request.getSession () 메소드를 호출 할 때 해당 HTTPSESSION 객체가 없으면 org.apache.catalina.manager의 세션 컨테이너에 새 개체가 생성되어 추가됩니다. 관리 모든 세션 수명주기를 저장하고 세션이 만료되고 재활용되고, 서버가 닫히고, 세션이 디스크로 직렬화됩니다. 클라이언트는 세션 객체에 해당하여 생성 한 세션 값을 저장합니다.
이 클라이언트와 관련된 세션이 만료 된 경우에도 request.getSession () 메소드가 요청한 표준 세션이 항상 존재합니다. 만료되면 새로운 것이 생성되지만 이전에 설정된 세션 값은 손실됩니다.
3 쿠키 및 세션 보안 비교
쿠키는 HTTP 헤더를 통해 저장된 데이터를 클라이언트에서 서버로 전달한 다음 서버에서 클라이언트로 전달합니다. 모든 데이터는 클라이언트 브라우저에 저장됩니다. 이러한 데이터에 액세스 할 수 있으며 쿠키는 플러그인을 통해 추가 및 수정할 수도 있습니다. 모든 쿠키의 보안은 상대적으로 열악합니다. 이에 비해 세션은 서버 측의 데이터를 저장하여 훨씬 더 안전합니다. 쿠키 ID를 뒤로 전달하기 위해서만 쿠키 만 있으므로 세션은 사용자 개인 정보 및 중요한 데이터를 저장하는 데 더 적합합니다.
분산 세션 프레임 워크
대규모 인터넷 응용 프로그램에서 쿠키를 사용하면 쿠키를 사용하면 분산 된 배포 문제를 잘 해결할 수 있기 때문에 쿠키 및 세션 만 사용하는 것은 불가능합니다. 대형 인터넷 애플리케이션 시스템에는 수백 개의 기계가 있으며 다양한 응용 프로그램 시스템이 함께 작동합니다. 쿠키는 사용자의 브라우저에 데이터를 저장하기 때문에 사용자를 방문 할 때마다 데이터가 서버로 다시 가져 오면 다른 서버에서 동일한 사용자의 요청이 처리되어 발생하는 쿠키 불일치 문제를 해결합니다.
응용 프로그램은 클러스터이므로 각 서버의 메모리에 세션을 저장할 수 없습니다. 각 서버에 수십만 명의 액세스 사용자가있는 경우 서버 메모리를 수용 할 수 없습니다. 수용 할 수 있더라도 세션이 다른 서버와 동기화 될 것이라고 보장 할 수는 없습니다. 따라서 이러한 세션을 공유하려면 언제든지 읽고 쓸 수있는 특수 분산 캐시에 저장해야합니다. 성능은 Memcache/Redis 또는 Taobao의 오픈 소스 분산 프레임 워크 Tair와 같은 요구 사항을 충족하기에 충분해야합니다.
반복 형식 제출 질문
웹 사이트에는 제출을 반복 한 많은 장소가 있습니다. 양식의 반복 제출을 방지하려면 각 액세스 요청이 서버에 고유되도록 사용자의 각 액세스 요청을 식별해야합니다. 사용자의 각 요청을 식별하기 위해 숨겨진 양식 항목은 사용자가 요청한 양식 필드에 추가 할 수 있으며 그 값은 다음과 같은 고유 한 토큰입니다.
<form id = "form"method = "post"> ... <input type = hidden name = "token"value = "xxx"/> </form>
사용자가 양식을 요청하여 사용자 세션으로 설정하면 고유 한 토큰이 생성됩니다. 사용자가 제출하면 토큰이 세션에 저장된 토큰과 일치하는지 확인합니다. 일관된 경우 반복적 인 제출이 없음을 의미합니다. 동시에, 세션의 토큰은 새로운 토큰 값으로 업데이트됩니다. 그렇지 않으면 사용자가 제출 한 토큰은 더 이상 현재 요청의 합법적 인 토큰이 아니며 제출이 실패합니다.
위의 것은 편집자가 당신에게 소개 한 Java의 쿠키와 세션에 관한 것들입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!