服务器无法识别每一次HTTP请求的出处(不知道来自哪个终端),它只会接受到一个请求信号,所以就存在一个问题:将用户的响应发送给其他人,必须有一种技术来让服务器知道请求来自哪,这就是会话技术。
会话:就是客户端和服务器之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏览器的过程。
会话状态:指服务器和浏览器在会话过程种产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来。
实现会话有两种方式:
属于同一次会话的请求都有一个相同的标识符,sessionID
测试代码
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title heretitle>
head>
<body>
<%
String sessionID = session.getId();
%>
<%=sessionID%>
body>
html>
结果展示
不同sessionID的原因:
String getID()
获取sessionID
void setMaxINactiveInterval(int interval)
设置session的失效时间,单位为秒
int getMaxInactiveInterval()
获取当前session的失效时间
void invalidata()
设置session立即失效
void setAttribute(String key,Object value)
通过键值对的形式来存储数据
Object getAttribute(String key)
通过键获取对应的数据
void removeAttribute(String key)
通过键删除对应的数据
Cookie是服务端在HTTP响应中附带传给浏览器的一个小文本文件,一旦浏览器保存了某个Cookie,在之后的请求和响应过程中,会将此Cookie来回传递,这样就可以通过Cookie这个载体完成客户端和服务端的数据交互。
Cookie
Cookie cookie = new Cookie("name","zhangsan");
response.addCookie(cookie);
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies)
{
out.write(cookie.toString());
}
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies)
{
out.write(cookie.getName()+":"+cookie.getValue()+"
");
}
void setMaxAge(int age)
设置Cookie的有效时间,单位为秒
int getMaxAge()
获取Cookie的有效时间
测试方法:
Cookie[] cookies = request.getCookies();
System.out.println(cookies[0].getMaxAge());
String getName()
获取Cookie的name
String getValue()
获取Cookie的value
session | Cookie | |
---|---|---|
保存在服务器 | 保存在浏览器 | |
保存的数据是Object | 保存的数据是String | |
会随着会话的结束而销毁 | 可以长期保存在浏览器中,与会话无关 | |
保存重要信息 | 保存不重要信息 | |
存储用户信息 | 存:setAttribute("name","admin") 取:getAttribute("name") |
存:response.addCookie(new Cookie("name","admin")). 取:request.getCookies() |
生命周期 | 服务端:只要web应用重启就销毁,客户端:只要浏览器关闭就销毁 | 不随服务端的重启而销毁,客户端:默认是只要关闭浏览器就销毁,我们通过setMaxAge() 方法设置有效期,一旦设置了有效期,则不随浏览器关闭而销毁,而是由设置的时间来决定。 |
退出登录 | session.invalidate() |
setMaxAge(0) |
cookie_login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title heretitle>
head>
<body>
<form action="cookieLogin" method="post">
<table>
<tr>
<td>
用户名:
td>
<td>
<input type="text" name="username">
td>
tr>
<tr>
<td>
密码:
td>
<td>
<input type="password" name="password">
td>
tr>
<tr>
<td>
<input type="submit" value="登录">
td>
<td>
<input type="reset" name="重置"/>
td>
tr>
table>
form>
body>
html>
CookieLoginServlet
package bysj01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/cookieLogin")
public class CookieLoginServlet extends HttpServlet{
private String myusername = "admin";
private String mypassword = "123456";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
String username = req.getParameter("username");
String password = req.getParameter("password");
if(username.equals(myusername) && password.equals(mypassword)) {
Cookie cookie = new Cookie("name",username);
resp.addCookie(cookie);
resp.sendRedirect("cookie_welcome.jsp");
}else {
resp.sendRedirect("cookie_login.jsp");
}
}
}
cookie_welcome.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title heretitle>
head>
<body>
<%
Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies)
{
if(cookie.getName().equals("name")){
out.write("欢迎回来"+cookie.getValue());
}
}
%>
<a href="cookieLogout">退出登录a>
body>
html>
CookieLogoutServlet
package bysj01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/cookieLogout")
public class CookieLogoutServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
Cookie[] cookies = req.getCookies();
for(Cookie cookie:cookies) {
if(cookie.getName().equals("name")) {
cookie.setMaxAge(0);
resp.addCookie(cookie);
resp.sendRedirect("cookie_login.jsp");
}
}
}
}
cookie_login.jsp显示结果
注:用户名就是servlet中设置的 这个案例设置的是用户名“admin”密码“123456”
cookie_welcome.jsp显示结果