session和filter

本文详细介绍了Java Web中的会话技术,包括Cookie和Session的使用、区别以及实际应用场景。同时,文章深入探讨了Filter过滤器的工作原理及其在实现登录功能、拦截请求中的重要作用。通过对Cookie和Session的对比,以及过滤器的实例解析,帮助读者更好地理解这些核心技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

会话

用户打开浏览器访问服务器资源,会话建立,直到有一方断开连接会话结束
一次会话中可以包含多次请求和响应

会话跟踪

一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据

cookie

跨浏览器不能访问,但是会话期结束还存在
是一种客户端会话技术,将数据保存到客户端,以后每次请求都携带cookie数据进行访问

cookie的使用

  •  使用:
    
    •  创建cookie对象,设置数据
      
    •  发送cookie到客户端,使用response对象
      
  •  获取:
    
    •  获取客户端携带的所有cookie,使用request对象
      
    •  遍历数组,获取每一个cookie对象
      
    •  使用cookie对象方法获取数据
      

cookie使用的细节

  •  存活时间
    
    •      默认情况下cookie存储在浏览器内存中,当浏览器关闭,内存释放,则cookie销毁
      
    •      setMaxAge  设置cookie在浏览器的过期时间
      
      •          正数,持久化存储,到时间自动删除
        
      •          负数:默认值,浏览器关闭cookie销毁
        
      •          0:删除对应的cookie
        
  •   cookie不能直接存储中文,如需要,则进行转码----URL编码
    

session

也不能跨浏览器访问,而且会话期结束就不存在,一种服务端会话跟踪技术:将数据保存到服务端

session使用

  •   获取session对象  
    
    •   HttpSession session = request.getSession();
      
  •  session对象功能
    
    •      setAttribute    存储数据到session
      
    •      getAttribute     根据key获取值
      
    •      removeAttribute   根据key删除该键值对
      

session使用细节

  •   session的实现原理是基于cookie的
    
  •  钝化活化:
    
    •      钝化:服务器正常关闭后,Tomcat自动将session数据写入硬盘文件
      
    •      活化:再次启动服务后,从文件中加载数据到session中
      
  •  销毁:
    
    •      默认情况下,30分钟自动销毁,可以用下面的代码修改
      
    •          <session-config>
      
    •              <session-timeout>30</session-timeout>
      
    •          </session-config>
      
    •      或者调用invalidate()方法
      

cookie和session的区别

首先,cookie和session都是用来完成一次会话内多次请求间数据共享的

  • 区别:
    •  存储位置:cookie将数据存储在客户端,session将数据存储在服务端
      
    •  安全性:cookie不安全,session安全
      
    •  数据大小:cookie最大3kb,session无大小限制
      
    •  存储时间:cookie可长期存储,session默认30分钟
      
    •  服务器性能:cookie不占服务器资源,session占用服务器资源
      

实现登录功能

记住密码的逻辑

  •  第一次点击记住密码,将用户名和密码放到cookie里面
    
  •  第二次进行登录的时候,判断遍历cookies里面是否有这个值,
    
    •      如果有,则直接将用户名取出来发往前端jsp
      

验证码原理

  •  1.画一个图片
    
  •  2.设置图片背景颜色
    
  •  3.设置验证码的字符
    
  •  4.将字符画进图片
    
  •  5.设置干扰线
    
  •  6.将验证码字符保存到session
    
  •  7.输入验证码之后到session里面比较验证码是否正确,正确之后继续接下来的操作
    

实例

注册登录的servlet

package com.wanxi.servlet;

import com.wanxi.model.UserModel;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
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.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Enumeration;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
   
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        //1.乱码处理
        req.setCharacterEncoding(StandardCharsets.UTF_8.toString());
        resp.setCharacterEncoding(StandardCharsets.UTF_8.toString());

        //2.获取前端的值
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String remember = req.getParameter("remember");
        String code = req.getParameter("code");

        //3.封装对象

        //4.逻辑处理

        //判断验证码是否正确
        if (code.equals(req.getSession().getAttribute("vCode"))){
   
            //点击记住密码后,将信息存储
            //如果remember是null,则没有equals方法,所以应该将字符串放在前面使用equals方法
            if ("on"</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值