会话管理(Cookie技术和Session技术)

目录

会话管理

会话管理——管理浏览器和服务器之间会话过程中产生的数据,管理数据的技术有Cookie和Session两种

Cookie技术

会话的数据保存在浏览器上(客户端)

Cookie的使用

        // 1、创建cookie对象
        Cookie cookie1 = new Cookie("name", "yourname");
        Cookie cookie2 = new Cookie("email", "12345@qq.com");

        // 2、把cookie数据发送给浏览器
        response.addCookie(cookie1);
        response.addCookie(cookie2);

        // 3、接受浏览器的cookie信息
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for(Cookie c:cookies){
                System.out.println(c.getName() + " " + c.getValue());
            }
        } else{
            System.out.println("没有接收到cookie数据");
        }

Cookie原理

1、服务器创建Cookie对象,并把数据存储到Cookie对象中

Cookie cookie1 = new Cookie("name", "myname");

2、服务器发送Cookie信息到浏览器

response.addCookie(cookie1);

说明:服务器是通过响应头(set-cookie)将数据发送给浏览器的
3、浏览器得到服务器的响应后,将响应头中的Cookie信息保存在服务器中
4、浏览器下次访问服务器时,请求头中会带着Cookie信息
5、服务器端接受浏览器发送的Cookie信息

Cookie[] cookies = request.getCookies()

说明:浏览器是通过请求头(cookie)将数据发送给服务器的

Cookie注意事项

1、Cookie的有效路径

cookie.setPath(path);

浏览器访问服务器时只会携带相应路径下的Cookie。Cookie对象不设置路径时默认路径为该Web应用。
2、Cookie的有效时间

cookie.setMaxAge(time);

正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
负整数:表示cookie数据保存浏览器的内存中,会话结束就删除该数据,即浏览器关闭cookie就丢失了。
零:表示删除同名的cookie数据
3、Cookie对保存数据的限制
Cookie只能保存非中文的字符串类型。每个Cookie的大小不能超过4K。

Session技术

会话的数据保存在服务器上
由于Cookie的使用有局限性,所以引进了Session技术。

Session的使用

public class SessionDemo1 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.创建session对象
        HttpSession session = request.getSession();

        // 2.保存会话数据
        session.setAttribute("name", "yourname");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

}


public class SessionDemo2 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.拿到session对象
        HttpSession session = request.getSession();

        // 2.拿到session里面所保存的会话数据
        String name = (String) session.getAttribute("name");
        System.out.println(name);   
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

}

Session的原理

1、第一次创建HttpSession对象会给其分配一个sessionID(JSESSION)
2、服务器会把JSESSION保存在一个Cookie对象中发给浏览器保存

    Cookie cookie = new Cookie("JSESSIONID", sessionID);
    response.addCookie(cookie);

3、浏览器再次request.getSession()的时候,会带着ISESSION访问服务器
如果服务器中存在对应sessionID的session对象,返回该对象
反之,创建新的session对象(像第一步一样)
说明:Cookie的有效时间默认为到会话结束,所以当关闭该浏览器再重新开一个的时候,并不能访问上一次保存在服务器里面的session对象。

Session注意事项

1、getSession()/getSession(true)——创建或得到session对象,没有匹配的session编号时自动创建新的session对象
getSession(false)——得到session对象,没有匹配的session编号时返回null
2、session的有效时间
setMaxInactiveInterval(int interval)

  • 默认情况30分钟服务器自动回收

  • 自己添加Cookie并设置保存时间

Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
  • 全局修改session有效时间
<session-config>
    <session-timeout>1</session-timeout>
</session-config>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值