初识Cookie和Session

这个写在前边:

session和cokie的区别

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
  • Session把用户的数据写到被用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
  • Session对象有服务器创建

初识Cookie和Session

Cookie

cookie就是把我们用户的信息写在浏览器的内存,为了方便服务器更好的提取我们用户信息的一种技术。用户访问一次浏览器用户的信息就会被cookie存储起来,此时如果没有设置它的存活时间,那么这个cookie的存活时间就是浏览器的默认时间

request.getCookies();//获取浏览器中的cookie
Cookie logNameTime = new Cookie("", "");//创建一个Cookie
logNameTime.setMaxAge();//设置Cookie的最大存活时间,这个时间是秒
response.addCookie(logNameTime);//把Cookie响应给浏览器

cookie中文乱码问题可以通过java.net.URLEncoderencode()方法来进行编码,通过java.net.URLEncodedecode()方法解码。

URLEncoder.encode("王五","UTE-8");//编码
URLDecoder.decode(cookie.getValue(),"UTF-8"));//解码

下边看一个具体的小例子

package com.zkw.cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

//用户上一次访问的时间
public class CookieDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器,告诉你,你来的时间,把这个时间封装成为一个信件,你下次带来,就知道你来了
        //中文乱码
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");

        PrintWriter out = resp.getWriter();

        Cookie[] cookies = req.getCookies();
        if(cookies != null){
            out.write("你上以访问的时间是:");
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("LogNameTime")){
                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    out.write(date.toLocaleString());
                }
            }
        }else{
            out.write("你是第一次访问本站!!!");
        }

        Cookie logNameTime = new Cookie("LogNameTime", System.currentTimeMillis()+"");
        logNameTime.setMaxAge(24*60*60);
        resp.addCookie(logNameTime);
    }

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

在这里插入图片描述

在浏览器中看Cookie的位置,以谷歌浏览器为例

在这里插入图片描述

session

Cookie中保存的数据都是String类型的有一定的局限性。

session中保存的数据一个是String类型一个是Object类型,session的信息是存储在服务器上的,每一个浏览器只有一个session

session的销毁主要有两种方法一种是通过session.invalidate()方法来实现,在使用这一种方法是最好先使用session.removeAttribute("name");来移除session;另一种是通过配置web.xml文件来实现自动销毁。

<session-config>
       <!-- 这里可以设置 session的自动注销的时间,这个时间是以分钟为单位的,我这里设置的是1分钟之后自动注销-->
        <session-timeout>1</session-timeout>
    </session-config>

下边看一个小例子

package com.zkw.session;

import com.zkw.pojo.Person;

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 SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置防止中文乱码
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        //获取session
        HttpSession session = req.getSession();

        //给session中存东西
        session.setAttribute("person",new Person("王五",3));

        //获取session的id
        String sessionId = session.getId();

        //判断session是不是新创建的
        if (session.isNew()){
            resp.getWriter().write("这个session是新创建的它的Id为:"+sessionId);
        }else{
            resp.getWriter().write("这个session是已经存在服务器中了它的Id为:"+sessionId);
        }

        //取出在session中存的数据
        Person person = (Person)session.getAttribute("person");
        System.out.println(person.toString());
    }

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

这里的Person是一个类。

在这里插入图片描述

当然这些都需要配置web.xml文件在这里就不给出来了,其实配置的方法就那几步,不会的小伙伴们可以看一下博主前几期的博客。还有那个Person类里边只有两个属性一个是name一个是Id

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值