您好,欢迎来到钮旅网。
搜索
您的当前位置:首页Cookie简单案例

Cookie简单案例

来源:钮旅网

一、Cookie

1.1 new Cookie(“key”,“value”)

  • 设置的值中不能包含空格

1.2 cookie.setMaxAge(10)

  • 默认值是-1,表示关闭浏览器,cookie的值就会清除

1.3 案例

package com.example.demo.Goods;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

@Controller
public class GoodsController {
    @RequestMapping("/Login")
    public String Login(@RequestParam("phone")String phone, @RequestParam("pass")String pass, HttpServletRequest request, HttpServletResponse response){
        boolean flag = false;
        Cookie[] cookies = request.getCookies();
        if(cookies != null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals(phone)) {
                    System.out.println("有对应的cookie");
                    System.out.println("cookie的时效: " + cookie.getMaxAge());
                    System.out.println("cookie的Comment: " + cookie.getComment());
                    System.out.println("cookie的Domain: " + cookie.getDomain());
                    System.out.println("cookie的Name: " + cookie.getName());
                    System.out.println("cookie的Path: " + cookie.getPath());
                    System.out.println("cookie的Value: " + cookie.getValue());
                    System.out.println("cookie的Secure: " + cookie.getSecure());
                    System.out.println("cookie的Version: " + cookie.getVersion());
                    flag = true;
                }
            }
        } if(flag == false){
            LocalDateTime now = LocalDateTime.now();
            System.out.println("创建cookie了");
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH:mm:ss");
            String format = LocalDateTime.now().format(dateTimeFormatter);
            Cookie cookie = new Cookie(phone, pass + "创建的时间是:_" + format);
            cookie.setMaxAge(10 * 60);
            cookie.setPath("/");
            response.addCookie(cookie);
            System.out.println("------------------------------------------");
            System.out.println("新建的cookie的时效: " + cookie.getMaxAge());
            System.out.println("------------------------------------------");
        }
            return "Success";
    }
}

1.4 cookie.setPath("/");

  • path默认是产生cookie的路径,如果不设置则只默认产生cookie的路径下的文件才能访问到该cookie,而其他路径的文件则访问不到该cookie。
    参考:

1.5 cookie.setDomain()

  • 用来设置跨域,比如说a.com只能访问到自己域下面的cookie,而不能访问b.com下的cookie。

1.6 cookie的同名问题

  • 同一个路径下的cookie,一样的名称的cookie,后面会覆盖前面的。
  • 不同路径下的cookie,可以存在同名的cookie。

1.7 参考

二、Session

2.1 session简单案例

package com.example.demo.Goods;

import org.springframework.boot.web.servlet.server.Session;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.crypto.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

@Controller
public class GoodsController {
    @RequestMapping("/Login")
    public String Login(@RequestParam("phone")String phone, @RequestParam("pass")String pass, HttpServletRequest request, HttpServletResponse response){
        HttpSession session;
        if(request.getSession().getAttribute(phone) != null){
            LocalDateTime a = LocalDateTime.now();
            session = request.getSession();
            System.out.println("用户的session信息是: " + session.getAttribute(phone));
            System.out.println("session的ID是" + session.getId());
            System.out.println("session的CreationTime是" + a.plusNanos(session.getCreationTime()));
            System.out.println("session的LastAccessedTime是" + a.plusNanos(session.getLastAccessedTime()));
            System.out.println("session的ServletContext是" + session.getServletContext());
            System.out.println("session的MaxInactiveInterval是" + session.getMaxInactiveInterval()/60 + "分钟");
        }else {
            request.getSession().setAttribute(phone, pass);
        }
         return "Success";
    }
}

结果:
第二次登陆:且未到session的过期时间

用户的session信息是: 122
session的ID是0BB6388BF0F1D41C7A69B7C3C9D3F4
session的CreationTime是2019-12-11T21:11:37.9572157
session的LastAccessedTime是2019-12-11T21:11:37.957257873
session的ServletContext是org.apache.catalina.core.ApplicationContextFacade@4c90d147
session的MaxInactiveInterval是30分钟

2.2 存储sessionId

  • cookie
  • 重写url,使用response.encodeURL()方法。

2.3 session路径问题

session没有任何的路径访问问题。

2.4 常用方法

  • isNew():是否是新的Session,一般在第一次访问的时候出现

  • getid():拿到session,获取ID

  • getCreationTime():当前session创建的时间

  • getLastAccessedTime():最近的一次访问这个session的时间。

  • getRrquestedSessionid: 跟随上个网页cookies或者URL传过来的session

  • isRequestedSessionIdFromCookie():是否通过Cookies传过来的

  • isRequestedSessionIdFromURL():是否通过重写URL传过来的

  • isRequestedSessionIdValid():是不是有效的sessionID

2.5 session键值类型

  • 键是string类型
  • 值是Object类型

2.6 设置session的有效期

session.setMaxInactiveInterval(600);

2.7 销毁session

removeAttribute()就是从session删除指定名称的绑定对象,也就是说调用此方法后再调用getAttribute(Stringname)时,不能获取指定名称的绑定对象,但是session还存在。invalidate就是销毁此session对象,session对象中绑定的那些对象值也都不存在了.
session.invalidate()是销毁跟用户关联session,例如有的用户强制关闭浏览器,而跟踪用户的信息的session还存在,可是用户已经离开了。虽然session 生命周期浏览默认时间30分,但是在30分钟内别的用户还可以访问到前一个用户的页面,需销毁用户的session。session.removeAttribute()移除session中的某项属性。
在用户登陆中,用户退出时执行的是 request.getSession().removeAttribute(“userSession”);
session被销毁了
// 注销用户,使session失效。
验证验证码时,获取到session中的验证码后,用的是removeAttribute
是清空当前session中指定的属性,下个request中的sessionID是不变的
也就是说,session还是原来的session

2.8 设置session永不过期

session.setMaxInactiveInterval(-1);

2.9 session.setMaxInactiveInterval(0);

在tomcat6中调用
request.getSession().setMaxInactiveInterval(0);
这个session会立即过期。
而在tomcat8中,同样的调用,会导致这个session永不过期,这也跟Oracle在HttpSession文档中描述一致:
An interval value of zero or less indicates that the session should never timeout.

参考:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务