栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

web知识3(cookie+session)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

web知识3(cookie+session)

一:会话技术概述
1.概述:会话就是由多次请求和响应组成的一次网络上的活动;
2.会话过程中要解决的问题:多次请求和响应之间需要存储数据;
3.会话期间存储数据的技术:会话技术
①:cookie:将数据存储在浏览器端
②:Session:将数据存储在服务器端
4.会话技术存储数据的特点:在多次请求和响应之间共享

二:cookie技术
1.概述:cookie指的是少量信息;
2.cookie的产生:
①:创建:由web服务器创建,并发送给浏览器;
②:保存:保存在浏览器端(硬盘上);
3.应用场景:
①:自动登录;
②:记住登录用户名和密码信息;
4.cookie基本API:
创建: cookie cookie = new cookie(name,value);
获取name值: String name = cookie.getName();
获取value值: Strign value = cookie.getValue();
发送cookie: response.addcookie(cookie);
设置cookie的值: cookie.setValue(value);
获取所有cookie: cookie[] getcookies() = rquest.getcookies();
5.cookie的存活时间:
①:我们创建的cookie对象默认是会话级别的cookie,浏览器关闭后cookie立即销毁;
②:持久型的cookie:浏览器关闭后能够保存一段时间,设置cookie的最大存活时间:cookie.setMaxAge(int second);
6.cookie的有效路径:
①:cookie能够被访问到的路径;
②:能够在有效路径或其子路径下获取到cookie;
③:通常设置cookie的有效路径为"/"或不设置;
7.cookie删除:
①:客户端:

  • 会话级别的cookie,关闭浏览器后cookie立即消失;
  • 禁用cookie;
  • 手动清除cookie;
    ②:服务端:
  • 通过Servlet,将原来的cookie置换;
    8.cookie的优势及弊端:
  • 优势:
    • 为服务端标识用户提供依据;
    • 减轻了服务端数据存储的压力;
  • 弊端:
    • 数据存储在客户端不安全;
    • 存储的数据大小受限,一个cookie存储的数据最大为4K;

案例:记住用户名和密码案例(自己实现过)


上述js代码中:cookie.getcookie()方法被封装在common.js中,使用前,先导入common.js文件。

var cookie = {
    getcookie: function (key) {
        return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\s*" + encodeURIComponent(key).replace(/[-.+*]/g, "\$&") + "\s*\=\s*([^;]*).*$)|^.*$"), "$1")) || null;
    }
};
第一步:用户登录成功之后,获取用户的用户名和密码;
第二步:创建cookie对象,保存用户的用户名和密码信息;
第三步:将cookie发送给浏览器保存;
		//3、响应数据
        if (loginFlag) {
            //如果记住我复选框被勾选
            if ("remember-me".equals(rememberMe)) {
                //处理记住密码业务逻辑
                cookie namecookie = new cookie("name", name);
                cookie pwdcookie = new cookie("password", password);
                //将cookie发送给浏览器
                response.addcookie(namecookie);
                response.addcookie(pwdcookie);
            }
            //登录成功  重定向到成功页面
            response.sendRedirect("/success.html");
        }

三:session技术
1.概念:Session是服务器为每个访问这个服务器的客户端用户创建的一个容器。
2.作用:这个容器中存储的数据能够在多个request之间实现共享。
3.特点:服务器为每个访问这个服务器的客户端用户创建的一个容器。
4.Session最常见的应用场景:
①:登录成功之后,将用户数据保存在session中;
②:验证码校验过程中,将服务器端生成的验证码保存在session中;

5.Session常用API(重要)

6.Session标识用户的原理:
第一步:第一次创建session对象时,服务器把sessionid以cookie的形式发送给浏览器;
第二步:浏览器第二次访问服务器的时候,会携带这个cookie;
第三步:服务器根据浏览器上次存储在cookie中的sessionId,查找到上次的Session;
7.Session的生命周期
①:创建时机:第一次调用reqeust.getSession(); tomcat创建
②:使用session:域对象
作用:存储数据 API: setAttribute(name,value) getAttribute(name)
特点:在服务器端共享数据(多次请求和响应之间)
③:销毁:
1、session手动销毁:session.invilidate();
2、过期销毁:session默认存活时间–30min
3、非正常关闭tomcat;
8.浏览器关闭后,session持久化方案:
①. 在Servlet中手动创建JESSIONID;
②. 手动设置JESSIONID的存活时间;
③. 将JESSIONID相应给浏览器;
9.Session综合案例(验证码校验)

①:页面


②:CheckCodeServlet

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;


@WebServlet("/CheckCodeServlet")
public class CheckCodeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // gui 生成图片
        // 1 高和宽
        int height = 30;
        int width = 60;
        String data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
        Random random = new Random();
        // 2 创建一个图片
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        // 3 获得画板
        Graphics g = image.getGraphics();
        // 4 填充一个矩形
        // * 设置颜色
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, width, height);
        g.setColor(Color.WHITE);
        g.fillRect(1, 1, width - 2, height - 2);
        // * 设置字体
        g.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, 25));
        StringBuffer sb = new StringBuffer();
        // 5 写随机字
        for (int i = 0; i < 4; i++) {
            // 设置颜色--随机数
            g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));

            // 获得随机字
            int index = random.nextInt(data.length());
            String str = data.substring(index, index + 1);
            // 写入
            g.drawString(str, width / 6 * (i + 1), 20);
            sb.append(str);//  获取验证码数据
        }
        //  验证码保存到session中
        request.getSession().setAttribute("code",sb.toString());
        // 6 干扰线
        for (int i = 0; i < 3; i++) {
            // 设置颜色--随机数
            g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
            // 随机绘制先
            g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));
            // 随机点
            g.drawOval(random.nextInt(width), random.nextInt(height), 2, 2);
        }

        // end 将图片响应给浏览器

        ImageIO.write(image, "jpg", response.getOutputStream());
    }
}

③:LoginServlet

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;
import java.io.IOException;


@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        //1、获取请求数据
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        String rememberMe = request.getParameter("rememberMe");
        //获取验证码
        String checkCode = request.getParameter("checkCode");

        //封装数据
        User user = new User();
        user.setName(name);
        user.setPassword(password);

        //验证码校验
        //1、获取session中的验证
        String serverCode = (String) request.getSession().getAttribute("code");
        if(!serverCode.equalsIgnoreCase(checkCode)){
            //验证码错误
            //登录失败  拼接login.html,并回显错误信息
            request.setAttribute("errorMsg", "验证码错误!");
            request.getRequestDispatcher("/loginErrorServlet").forward(request, response);
            return;
        }


        //2、处理数据:登录业务逻辑
        UserService userService = new UserService();
        boolean loginFlag = userService.login(user);


        //3、响应数据
        if (loginFlag) {
            //如果记住我复选框被勾选
            if ("remember-me".equals(rememberMe)) {
                //处理记住密码业务逻辑
                cookie namecookie = new cookie("name", name);
                cookie pwdcookie = new cookie("password", password);
                //将cookie发送给浏览器
                response.addcookie(namecookie);
                response.addcookie(pwdcookie);
            }
            //登录成功  重定向到成功页面
            response.sendRedirect("/success.html");
        } else {
            //登录失败  拼接login.html,并回显错误信息
            request.setAttribute("errorMsg", "用户名或密码错误!");
            request.getRequestDispatcher("/loginErrorServlet").forward(request, response);
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/332699.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号