会话cookie session

概念

  • 浏览器和服务器开始交互到交互结束,中间做的事情

cookie客户端技术

  • localstorage 数据存在域浏览器
  • sessionstorage 页面关闭后就从浏览器删除了
  • cookie 唯一能和服务端交互

服务端向客户端添加cookie

  • Cookie ck = new Cookie(“ckname”,“tom”)
  • response.addCookie(ck)

服务端获取客户端指定的cookie

  • Cookie[] cookies = new Cookie();
  • Cookie cookie = CookieUtil.getCookieByName(cookies,“ckname”);
  • cks.getName 获取cks的名字
  • cks.getValue 获取cks的值
  • cks.setMaxAge(60) 设置cookie的生命周期为60秒把cookie从内存持久化到硬盘,到期后自动删除,参数为0l表示立即把cookie删除,负数为默认参数,表示浏览器关闭,cookie从内存中消失

存取中文数据

  • tomcat从1.8以后可以存中文,但是中文不能有特殊的字符,如空格
  • 存:Cookie cookie = new Cookie(“ckname”,URLEncoder.encode("你好“),"utf-8);
  • 取:String value = cookie.getValue();
  • String decode = URLRecoder.decode(value,“utf-8”)

cookie 的特点:

  • 存在客户端的技术
  • 4kb,数量20
  • tomcat1.8之后支持中文,但是特殊符号需要编码和解码处理

设置路径cookie共享问题

  • setPath(”/路径“) 表示只能被该路径下的资源访问cookie
  • setPath(”/“) 表示能被localhost:8080下的所有的资源访问cookie

代码

  • 工具类
public class CookieUtils {
    private CookieUtils(){}
    public static Cookie getCookieByName(String CookieName, HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if(CookieName.equals(cookie.getName())){
                return cookie;
            }
        }
        return null;
    }
}
  • 显示上次登陆时间
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        Cookie ck = CookieUtils.getCookieByName("lasttime", request);
        PrintWriter pw = response.getWriter();
        if(ck==null){
            pw.print("这是您第一次访问");
        }else {
            String time = ck.getValue();
            long tl = Long.parseLong(time);
            String t = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(tl));
            pw.print(t);
        }
        Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");
        cookie.setPath("/");
        cookie.setDomain("localhost");
        cookie.setMaxAge(60*60*24*365*20);
        response.addCookie(cookie);
    }

session

  • 客户端技术,驻留在服务器的内存中

session 的获取

  • HttpSession session = request.getSession();

生命周期

  • 一次会话多次请求中有效

原理

  • 浏览器每次将cookie中的JSESSIONID传给服务器,然后去服务器的内存中找对应的session数据
  1. 浏览器关闭了,session还存在吗?
    ​不对,浏览器关闭了服务器中的session还在,但是浏览器器中的JSEESIONID默认情况下浏览器关闭就没了,当重新打开浏览器再次访问服务器的时候只会重新创建一个Session。如果想要让两次获取到的session是同一个,可以修改保存在浏览器的JSESSIONID的maxAge的值,来延长cookie的生命周期
  2. 服务器重启后原来的sesssion还在吗?

正常关闭tomcat的时候,会把所有内存中的session写入到硬盘中的文件,这个操作叫做(序列化/钝化/写入)

​ 当再次启动tomcat的时候,会把硬盘中的session读取到内存。这个操作叫做(反序列化/活化/读取)
3. session默认30分以后销毁

session的特点

  • 存在服务器端
  • 没有大小的限制

session和cookie的区别

  • session存在服务器,cookie存在客户端
  • session没有大小限制,cookie有4k
  • session安全,cookie不安全
  • session基于cookie
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值