一.Session的概述
1.session就是会话,它是用来维护客户端和服务器之间关联的一种技术。
2.Session就一个接口(HttpSession)
3.Session会话中,我们经常用来保存用户登录之后的信息。
4.每个客户端都有自己的一个Session会话。
二.Session的常见方法
- resquest.getSession():得到请求游览器(客户端)对应的session。如果没有,那么就创建应该新的session。如果有那么就返回对应的session
2.setAttribute(String s, Object o):在session存放属性
3.getAttribute(String s):从session中得到s所对应的属性
4.removeAttribute(String s):从session中删除s对应的属性
5.getId():得到session所对应的id
6.invalidate():使session立即无效
7.setMaxInactiveInterval(int i):设置session最大的有效时间。这个有效时间是两次访问服务器所间隔的最大时间,如果超过最大的有效时间,这个session就会失效。
三.Session代码演示
首先是html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
<base href="/cs/">
</head>
<body>
<form action="checkLogin" method="post">
用户名:<input type="text" name="username" /><br/>
密 码:<input type="password" name="password" /><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
Servlet中使用Session实现
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/mainPage")
public class MainServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//得到session
HttpSession session = request.getSession();
//取出用户名
Object username = session.getAttribute("username");
PrintWriter writer = response.getWriter();
//判断用户名是否存在
if (username != null){
//在一天内登录过,无需再次登录
writer.write("<h1>用户:"+username+" 登录成功</h1>");
}else {
//没有登录,登录间隔大于1天。重定向到登陆界面
response.sendRedirect(request.getContextPath()+"/login.html");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
(1)当用户第1次通过浏览器使用用户名和密码访问服务器时,服务器对用户名和密码进行验证。
(2)验证成功后,在服务器端生成并保存session数据,通过cookie向浏览器返回sessionId,浏览器将sessionId记录在cookie中。
(3)当浏览器再次访问时,会默认携带cookie中的sessionId,服务器校验sessionId存在或有效,如果存在就保持当前会话,不需要重新登录,返回浏览器所需数据。
四.session和cookie的比较
1.cookie保存在客户端,session保存在服务端
2.cookie作用于他所表示的path中,范围较小。session代表客户端和服务器的一次会话过程,web页面跳转时也可以共享数据,范围是本次会话,客户端关闭也不会消失。会持续到我们设置的session生命周期结束(默认30min)。cookie用来携带JSESSIONIDcookie存放的数据量较小,session可以存储更多的信息。
3.cookie存放在客服端,但session是存放于服务器的,当有很多客户端访问时,会产生大量的session,这些session会影响服务端的性能。