Session和过滤器

1. Session技术
1.1.1 Session介绍

Session是服务器技术,数据是保存在服务器端。
可以解决浏览器保存Cookie遇到的问题,例如: 中文支持,数据量大小,数据个数…

【注意】
Session是依赖于Cookie来完成的!!!
如果浏览器关闭了Cookie功能,会导致Session功能无法使用【非绝对】
可以利用URL参数来解决Session信息验证问题,但是非常麻烦!

Session可以保留浏览器和服务器直接的交互数据,同时Session也是一个域对象!!
1. 一个Session对象可以存储多个键值对信息,并且支持任意类型,包括中文字符串
2. Session没有严格的大小限制
3. Session是保留在服务器端,从理论角度分析,只要硬盘足够大,存什么都行,数量不限制
4. 每一个浏览器请求会对应一个Session对象,如果需要在之后的请求中想要继续获取Session,需要保存一个核心的Cookie信息 JSESSIONID UUID

1.3.2 Session方法总结

通过HttpServletRequest对象获取Session对象
HttpSession session = getSession(boolean create);
如果传入false,要求必须验证Cookie名字为JSESSIONID 的cookie,如果没有Cookie或者Cookie存储的JSESSIONID 服务器端不存在,返回值为null,无对应Session,反之返回对应Session对象
如果传入是true,首先通过Cookie获取对应验证Session,如果没有获取到对应Session,创建新Session,并且生成一个新的SessionID

String getId();
获取Session对象的ID号,在当前服务器中具有唯一性

setInactiveInterval(int sec);
设置Session对象的有效时间,所谓有效时间,是从用户请求时间开始计算,如果在有效时间内用户重新发送了带有对应SessionID Cookie的请求,有效时间从新计算,如果设置0或者负数,有效时间为永久

invalidate();
在服务器端销毁Session对象

Session也是一个域对象
存在setAttribute,getAttribute,removeAttribute方法
1.1.3 使用Session和Cookie完成自动登录在这里插入图片描述

代码实现:
主页面:

@WebServlet("/index.do")
public class IndexServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 1. 获取Session 非创建模式
    HttpSession session = req.getSession(false);

    if (null == session) {
        resp.sendRedirect("login.html");
    } else {
        resp.setContentType("text/html;charset=utf-8");

        resp.getWriter().append("<h1>欢迎光临" + session.getAttribute("userName") + "</h1>");
        resp.getWriter().append("<h3><a href='logout.do'>退出</a></h3>");
    }
}

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws 	ServletException, IOException {
    	doGet(req, resp);
	}
}

登录页面:

@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
@Overr
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值