Session

605 阅读2分钟

一.Session的概述

1.session就是会话,它是用来维护客户端和服务器之间关联的一种技术。

2.Session就一个接口(HttpSession)

3.Session会话中,我们经常用来保存用户登录之后的信息。

4.每个客户端都有自己的一个Session会话。

二.Session的常见方法

  1. 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会影响服务端的性能。