http 상태 비저장 프로토콜에 대한 솔루션:
HTTP는 상태 비저장 프로토콜입니다. 상태 비저장 프로토콜에서는 서버가 여러 요청에 걸쳐 각 사용자에 대한 정보나 상태를 유지하도록 요구하지 않습니다.
그러나 일부 웹 애플리케이션은 한 페이지에서 다른 페이지로의 사용자 진행 상황을 추적해야 할 수도 있습니다. 예를 들어 웹 서버가 사용자를 위해 웹 페이지 콘텐츠를 맞춤화해야 하는 경우입니다. 이러한 상황에 대한 해결 방법은 다음과 같습니다.
HTTP 쿠키 사용.
서버 측 세션.
숨겨진 변수(현재 페이지에 양식이 포함된 경우)
URI 인코딩 매개변수를 사용하여 URL 재작성(예: /index.php?session_id=some_unique_session_code).
프로토콜을 Stateless로 만드는 이유는 서버가 여러 요청의 상태를 추적할 필요가 없기 때문이지, 원한다고 해서 추적할 수 없기 때문이 아닙니다. 이는 클라이언트와 서버 간의 계약을 단순화하고 많은 경우(예: CDN을 통한 정적 데이터 제공) 전송해야 하는 데이터 양을 최소화합니다. 서버가 클라이언트 액세스 상태를 유지해야 하는 경우 요청을 만들고 응답하는 구조는 더욱 복잡해집니다. 사실 모델의 단순성은 이 모델의 가장 큰 특징 중 하나입니다.
쿠키는 서버에서 생성 및 유지되지만 브라우저 측에 저장되는 세션 기술입니다.
쿠키 적용 시나리오: 사용자 이름과 비밀번호를 기억하고 로그할 필요가 없습니다. 7일 동안
//创建cookie Cookie cookie = new Cookie("username", "admin"); //将cookie响应到浏览器 response.addCookie(cookie);
쿠키가 메시지로 표현되는 방식:
서버에서 쿠키가 생성되고 브라우저에 응답하면 응답 메시지가 나타납니다: Set-Cookie: 사용자 이름=admin
그 후 브라우저가 서버에 요청을 보낼 때마다 이 쿠키가 전달되며 요청 메시지에 다음과 같은 메시지가 표시됩니다. 쿠키: 사용자 이름=admin
브라우저에 쿠키에 응답한 후 브라우저의 실행 메모리에 저장되며, 브라우저를 닫으면 브라우저의 실행 메모리가 해제되므로 쿠키가 삭제됩니다. 따라서 세션의 기본 유효 시간은 브라우저를 연 시점부터 브라우저를 닫는 시점까지입니다
//获取浏览器发送请求所携带的所有cookie Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie cookie : cookies) { System.out.println(cookie.getName() + "," + cookie.getValue()); } }
b>cookie.setValue()를 사용하세요
/*Cookie cookie = new Cookie("username", "root"); response.addCookie(cookie);*/ Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie cookie : cookies) { if(cookie.getName().equals("username")){ cookie.setValue("zhangsan"); response.addCookie(cookie); } } }
5. the cookie
그러나 쿠키의 유효 시간은 cookie.setMaxAge()
a> 시간은 음의 정수이므로 효과가 없습니다. 즉, 유효 시간은 브라우저가 닫힐 때까지 브라우저를 열어두세요
b> 설정된 유효 시간이 0이면 쿠키가 즉시 삭제된다는 뜻입니다
c> 설정된 유효 시간은 양의 정수입니다
유효 시간이 한 세션 미만이면 쿠키가 만료됩니다. 지정된 시간이 지나면 실행 중인 메모리에서 자동으로 삭제됩니다
유효 시간이 한 세션보다 큰 경우, 브라우저를 닫으면 쿠키의 데이터가 디스크에 저장됩니다. 브라우저를 다시 열면 디스크의 데이터가 복원됩니다. 실행 중인 메모리에 로드
6 쿠키의 유효 경로를 설정하세요.
cookie.setPath(); 쿠키가 생성되어 브라우저에 응답하면 지정된 경로에 접근할 때만 유효한 경로의 쿠키가 설정됩니다.2. 세션 개념세션은 서버에서 생성 및 유지되고 서버 측에 저장되는 세션 기술세션 적용 시나리오: 사용자의 로그인 상태 기록2, 세션 획득 시 메시지의 변경 사항 관찰 request.getSession()을 통해 세션 개체 가져오기이 세션에서 처음으로 request.getSession()에 액세스하여 세션 개체를 가져오면 응답 메시지에 키가 표시됩니다. JSESSIONID 쿠키입니다 브라우저를 통해 서버에 요청이 전송될 때마다 이 JSESSIONID 쿠키가 전달됩니다서버에 액세스할 때에도 요청 메시지에 JSESSIONID가 있는 한 request.getSession()을 사용하여 세션 개체를 다시 가져옵니다. 쿠키, 이 쿠키는 더 이상 응답 메시지에 나타나지 않습니다3. 세션의 원리Q: 세션의 원리는 무엇인가요? 세션과 쿠키는 어떤 관계가 있나요? 한 세션에서 동일한 세션이 획득되는 이유는 무엇인가요? 답변: request.getSession()을 통해 세션을 획득하면 요청 메시지에 JSESSIONID 키가 있는 쿠키가 획득됩니다. 요청 메시지에 JSESSIONID 키가 있는 쿠키가 없으면 이는 다음을 의미합니다. 현재 세션이 방금 시작되었다는 것은 현재 세션에서 세션 개체를 처음으로 얻은 것입니다. 이때 서버 내부에 세션 객체가 생성되고 JSESSIONID 키와 UUID의 임의 시퀀스 값을 사용하여 쿠키가 생성되고 생성된 세션 객체는 서버에서 관리하는 맵 컬렉션에 저장됩니다. UUID 무작위 시퀀스를 키로 사용하고 세션 객체를 값으로 사용하고 마지막으로 JSESSIONID 쿠키에 브라우저에 응답합니다若请求报文中存在键为JSESSIONID的cookie,此时获取该cookie的值,即UUID随机序列,以UUID随机序列为键,从服务器所维护的map集合中就可以获取唯一的session对象
void setAttribute(String name, Object value);
Object getAttribute(String name);
void removeAttribute(String name);
session的时效指在指定时间内,若没有对session进行任何的操作,此时session会自动失效
a>通过web.xml设置,单位是分钟
<session-config> <session-timeout>30</session-timeout> </session-config>
b>通过session.setMaxInactiveInterval()设置,单位是秒
session.setMaxInactiveInterval(1800);
session.invalidate()
session的钝化指服务器关闭,但是浏览器没有关闭,此时session中的数据会被序列化到磁盘上
session的活化指服务器启动,并且浏览器仍然没有关闭,此时会将序列化到磁盘上的数据重新加载到内存中
注意:若session中存储的是实体类对象,此时若要钝化,则该实体类和该实体类的成员变量也都要实现序列化的接口
1、cookie存储在浏览器端,session存储在服务器端,因此cookie相对而言不安全
2、cookie只能存储字符串类型的键值对,session可以存储任意类型的数据,因此若存储相同的数据,cookie可能会产生大量的cookie
3、由于每次浏览器发送请求都会携带cookie,若有大量的cookie,就会造成网络负担
위 내용은 Java에서 쿠키 및 세션 기술을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!