Servlet会话Cookie和Session

会话


会话字面意思:一次交流或交谈

servlet会话

​ 指的是用户打开一个浏览器,访问一个网站,只要不关闭该浏览器,不管用户点击多少个超链接,访问多少个资源,直到用户关闭浏览器,整个过程称为一次会话。

会话范围:打开网站,完成所需要的所有需求,是一次会话

浏览器记忆:Cookie

服务器的记忆:Session

怎么算会话结束
  • 客户端关闭了
  • 服务端销毁了
Cookie

​ 在浏览器端记录一些信息
在这里插入图片描述
这个响应头的信息是一个键值对

set-Cookie:name = wl

原理:设置响应头,浏览器接受响应头保存,然后浏览器下次的请求都会带着这个头的信息

response.setHeader("setCookie","name = wl")

服务器发送cookie

Cookie cookie = new Cookie("name","wl");
Response.addCookie(Cookie);

服务查看用户带来的请求是否有cookie

Cookie[] cookies = Request.getCookie();
//可以使用cookie来验证用户是否来过
//判断cookies是否为空,然后遍历即可
Cookie.getName();
Cookie.getValue();

测试用户是否来过

Cookie[] cookies = request.getCookies();
Cookie nameCookie = c;
if (cookies != null){
    for (int i = 0; i < cookies.length; i++){
        if (cookie.getName().equals("name")){
            nameCookie = cookie;
        }
    }
}
if (nameCookie != null)
    System.out.println(nameCookie.getValue());
Session

在服务器记录一些信息

只要客户端一旦连接上服务器,服务器就会自动产生Session;

一个连接对应一个session,session可以在一个会话中传递信息;

通过setAttribute设置值。

通过getAttribute获得值。

由服务器端控制,服务器如果重启了,信息就会丢失!

package com.westos.serlvet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class SessionTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题:
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        //Session由服务器自动创建,如何获得session

        //HttpSession 得到的sessioin对象
        HttpSession session = req.getSession();

        //得到sessionID,一次会话,一个seesionID;
        String id = session.getId();
        resp.getWriter().println("获得的sessionId:\n"+id);


        String name = "welong";
        //向session中存入一个值;
        session.setAttribute("name",name);
        resp.getWriter().println("存入信息成功:"+name);

    }




}
package com.westos.serlvet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

//获得session存入的值
public class SessionTest2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题:
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");

        //获得
        HttpSession session = req.getSession();
        System.out.println("得到的SessionID:"+session.getId());


        String name = (String) session.getAttribute("name");
        resp.getWriter().println("得到的session存入的信息"+name);

        //Servlet  <  Seesion  <  WebContext

    }
}

Session的寿命

session.setMaxInactiveInterval(int interval);

sessionID的存在时间就是cookie的时间,可以通过获取cookie设置setMaxAge控制

Session方法:

boolean session.isNew() // 判断session是否是新的,即session是否是第一次访问,访问第二次就是旧的
session.getCreationTime() // 获取session创建事件
session.getID() // 获取session的ID
session.getLastAccessTime() // 获取最后一次访问session的时间
session.getMaxInactiveInterval(60) // 设置session最大有效时间60s
session.invalidate(); // 立即销毁session
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值