Session

Session对象(重点)

服务器端状态管理技术

session

session用于记录用户的状态,session指的是一段时间内单个客户端与web服务器的一连串相关的交互过程
在一个session中,客户可能会多次请求并访问同一个资源,也有可能请求访问不同的服务器资源

session原理

服务器会为每一次会话分配一个session对象
同一个浏览器发起的多次请求会属于一次会话(session)
首次使用到session时,服务器会自动创建session,并创建cookie存储sessionID发送给客户端		

session是由服务器端创建

session使用

session作用域:拥有存储数据的空间,作用范围是一次会话有效
	一次会话是使用同一浏览器发送的多次请求,一旦浏览器关闭,则会话结束
	可以将数据存入session中,在一次会话的任意位置进行获取
	可传递任何数据(基本数据类型、对象、集合、数组)

获取session

@WebServlet(name = "SessionServlet",value = {"/session"})
public class SessionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通过request对象获取session对象
        HttpSession session = request.getSession();
        System.out.println(session.getId());
    }

Session保存数据

setAttribute(属性名,Object)保存数据到session中
session.setAttribute("key",value);//以键值对的形式存储在session作用域中

Session获取数据

getAttribute(属性名)获取session中的数据
session.getAttribute("key");//通过String类型的Key访问Object类型的value

Session移除数据

removeAttribute(属性名);从session中删除数据
session.removeAttribute("key");//通过移除session作用域中的值

Session与request应用区别

request是一次请求有效,请求改变,则request改变
session是一次会话有效,浏览器改变,则session改变		

Session生命周期

开始:第一次使用到session的请求产生,则创建session
结束:
	浏览器关闭,则失效
	Session超时,则失效
		session.setMaxInactiveInterval(seconds);//设置最大有效时间(单位:秒)
		
--------------------------------------------------------------------------------------	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        session.setMaxInactiveInterval(10);//设置session的有效期为10s
        System.out.println(session.getId());
    }
---------------------------------------------------------------------------------------
	手工销毁,则失效
		session.invalidate();//立即失效,登陆退出,注销

浏览器禁用cookie解决方案

浏览器禁用cookie的后果

服务器在默认情况下,会使用Cookie的方式将sessionID发送给浏览器,如果用户禁止cookie,则sessionID不会被浏览器保存,此时浏览器可以使用如URL重写这样的方式来发送sessionID

URL重写

浏览器在法报文服务器上某个地址时,不再使用原来的那个地址,而是使用经过改写的地址(即在原来的地址后面加上了sessionID)

实现URL重写

response.encodeRedirectURL(String URL) 生成重写的URL

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        String newUrl = response.encodeRedirectURL("/WebProject_war_exploded/getsession");
        System.out.println(newUrl);
        response.sendRedirect(newUrl);
        System.out.println(session.getId());
    }

声明:该博客为学习b站servlet教学视频的笔记,仅供以后复习之用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值