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。
    参考:cookie.setPath()的用法

1.5 cookie.setDomain()

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

跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
A机所在的域:home.langchao.com,A有应用cas
B机所在的域:jszx.com,B有应用webapp_b
1)在cas下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。
2)这个参数必须以“.”开始。
3)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取cas在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。
4)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享。

1.6 cookie的同名问题

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

1.7 参考

这一次带你彻底了解Cookie

二、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是0BB6388BF0F1D41C7A69B7C3C954D3F4
session的CreationTime是2019-12-11T21:11:37.957215789
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

销毁session时,removeAttribute()和invalidate()有何区别?

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.

参考:session的MaxInactiveInterval=0在tomcat6和tomcat8不同表现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wkhtmltopdf是一个开源的HTML到PDF转换器,它可以通过命令行工具在Linux、Windows和Mac OS X上运行。在使用wkhtmltopdf的过程中,我们有时需要在请求HTML页面的时候带上cookie,以便获取页面的权限或者获取登录后的数据。下面是一个完整的案例,演示如何在使用wkhtmltopdf的时候带上cookie。 1.安装wkhtmltopdf 在使用wkhtmltopdf之前,我们需要先安装它。wkhtmltopdf官网提供了各个平台下的安装包,可以直接下载安装。你也可以通过包管理工具进行安装,比如在Ubuntu上可以通过以下命令安装: ``` sudo apt-get install wkhtmltopdf ``` 2.创建一个测试的HTML页面 在本地创建一个测试的HTML页面,可以用任何文本编辑器创建一个名为`test.html`的文件,内容可以是任意的HTML代码,比如: ``` <!DOCTYPE html> <html> <head> <title>Test Page</title> </head> <body> <h1>Hello, World!</h1> </body> </html> ``` 3.设置cookie 假设我们需要在请求`test.html`页面的时候带上一个名为`auth_token`的cookie,那么我们可以通过以下命令将cookie保存到一个名为`cookie.txt`的文件中: ``` echo "auth_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" > cookie.txt ``` 在这里我们将`auth_token`的值设置为`XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`,你需要将其替换成你自己的值。 4.使用wkhtmltopdf生成PDF文件 现在我们可以使用wkhtmltopdf来生成PDF文件了,需要使用的命令行参数有两个:`--cookie-jar`和`--cookie`。`--cookie-jar`用于指定cookie文件的路径,`--cookie`用于指定需要传递的cookie,格式为`name value`,其中`name`是cookie的名称,`value`是cookie的值。 以下是生成PDF文件的命令: ``` wkhtmltopdf --cookie-jar cookie.txt --cookie auth_token XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX test.html test.pdf ``` 其中`XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`为你设置的`auth_token`值。这个命令将使用`cookie.txt`文件中的cookie,并将生成的PDF文件保存为`test.pdf`。 5.验证PDF文件 现在可以使用PDF阅读器打开`test.pdf`文件,验证是否成功生成。如果一切正常,你应该可以看到一个包含`Hello, World!`标题的PDF文件。 以上就是使用wkhtmltopdf带cookie的完整案例

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值