JavaWeb之Cookie&Session

妖狐艹你老母 2022-03-08 00:48 301阅读 0赞

直译是:小饼干。实际上,Cookie就是由服务器给客户端,并且存储在客户端上的一份小数据

应用场景

自动登录,查看浏览记录,购物车

HTTP请求是无状态的,客户端与服务器在通讯的时候,是无状态的。所以在客户端第二次访问服务器时,服务器不知道该客户端是否访问过。为了更好的用户体验,更好的交互【自动登录】,对公司来说,更好的收集用户习惯【大数据】

1.在响应时添加Cookie

  1. Cookie c = new Cookie("aa", "bb");
  2. //使用response的addCookie(c)方法
  3. response.addCookie(c);

2.在客户端收到的信息里,响应头就多出Set-Cookie字段

![Cookie01][]

  1. Cookie c = new Cookie("aa", "bb");
  2. Cookie c1 = new Cookie("cc", "dd");
  3. response.addCookie(c);
  4. response.addCookie(c1);
  5. //使用request的getCookies()方法
  6. Cookie[] cookies = request.getCookies();
  7. if(cookies!=null) {
  8. for (Cookie cookie : cookies) {
  9. String name = cookie.getName();
  10. String value = cookie.getValue();
  11. System.out.println(name + "=" + value);
  12. }
  13. }

常用方法

  1. public void setMaxAge(int expiry)
  2. 设置 cookie 的最大生存时间,以秒为单位。

在浏览器关闭后,cookie就没有了,没有设置cookie的有效期

expiry:有效。以秒计算

​ 正值:表示在这个时间过后,cookie会失效。

​ 负值:关闭浏览器,则cookie就会失效。默认值为-1

2.赋新值
  1. public void setValue(String newValue)
  2. 在创建 cookie 之后将新值分配给 cookie
  1. public void setDomain(String pattern)
  2. 指定应在其中显示此 cookie 的域。
  1. public void setPath(String uri)
  2. 指定客户端应该返回 cookie 的路径。
  3. cookie 对于指定目录中的所有页面及该目录子目录中的所有页面都是可见的。cookie 的路径必须包括设置 cookie servlet,例如 /catalog,它使 cookie 对于服务器上 /catalog 下的所有目录都是可见的。

官方没有提供delete方法。 也没有什么remove方法。

  1. Cookie cookie = new Cookie("aa","bb");
  2. cookie.setMaxAge(60*60*24);
  3. reponse.addCookie(cookie);
  1. Cookie [] cookies = request.getCookies();
  2. Cookie cookie = CookieUtil.findCookie(cookies , "aa");
  3. cookie.setMaxAge(0);
  4. reponse.addCookie(cookie);
  1. Cookie cookie = new Cookie("aa","xx");
  2. cookie.setMaxAge(0);
  3. reponse.addCookie(cookie);

例子 显示最近访问的时间。

  1. 判断账号是否正确
  2. 如果正确,则获取cookie。 但是得到的cookie是一个数组, 我们要从数组里面找到我们想要的对象。
  3. 如果找到的对象为空,表明是第一次登录。那么要添加cookie
  4. 如果找到的对象不为空, 表明不是第一次登录。

    if(“admin”.equals(userName) && “123”.equals(password)){

    1. //获取cookie last-name --- >
    2. Cookie [] cookies = request.getCookies();
    3. //从数组里面找出我们想要的cookie
    4. Cookie cookie = CookieUtil.findCookie(cookies, "last");
    5. //是第一次登录,没有cookie
    6. if(cookie == null){
    7. Cookie c = new Cookie("last", System.currentTimeMillis()+"");
    8. c.setMaxAge(60*60); //一个小时
    9. response.addCookie(c);
    10. response.getWriter().write("欢迎您, "+userName);
    11. }else{
    12. //1. 去以前的cookie第二次登录,有cookie
    13. long lastVisitTime = Long.parseLong(cookie.getValue());
    14. //2. 输出到界面,
    15. response.getWriter().write("欢迎您, "+userName +",上次来访时间是:"+new Date(lastVisitTime));
    16. //3. 重置登录的时间
    17. cookie.setValue(System.currentTimeMillis()+"");
    18. response.addCookie(cookie);
    19. }
    20. }else{
    21. response.getWriter().write("登陆失败 ");
    22. }
  1. 服务器给客户端发送过来的一小份数据,并且存放在客户端上。
  2. 获取cookie, 添加cookie

request.getCookie();

response.addCookie();

  1. Cookie分类

会话Cookie
默认情况下,关闭了浏览器,那么cookie就会消失。

持久Cookie

  1. 在一定时间内,都有效,并且会保存在客户端上。
  2. cookie.setMaxAge(0); //设置立即删除
  3. cookie.setMaxAge(100); //100 秒
  1. Cookie的安全问题。

由于Cookie会保存在客户端上,所以有安全隐患问题。 还有一个问题, Cookie的大小与个数有限制。 为了解决这个问题 —> Session .

Session

会话,Session是一种基于Cookie的一种会话机制。Cookie是服务器返回一小份数据给客户端,并且储存在客户端。Session的数据存放在服务器端

  • 常用API

    1. //得到会话ID
    2. String id = session.getId();
    3. //存值
    4. session.setAttribute(name, value);
    5. //取值
    6. session.getAttribute(name);
    7. //移除值
    8. session.removeAttribute(name);
  • Session何时创建 , 何时销毁?
  • 创建

如果有在servlet里面调用了 request.getSession()

  • 销毁

session 是存放在服务器的内存中的一份数据。 当然可以持久化. Redis . 即使关了浏览器,session也不会销毁。

  1. 关闭服务器

  2. session会话时间过期。 有效期过了,默认有效期: 30分钟。

[Cookie01]:

发表评论

表情:
评论列表 (有 0 条评论,301人围观)

还没有评论,来说两句吧...

相关阅读

    相关 javawebJDBC

    数据库访问时通过JDBC实现的,它为开发人员提供了标准的API。 数据库连接的两种方法:一种是通过JDBC驱动程序直接连接数据库,另一种是通过连接池技术连接数据库 JDBC

    相关 javawebCookie

    Cookie对象是由服务器产生并保存到客户端(内存或文件中)的信息,长用它记录用户个人信息及个性化设置。用户每次访问站点时,web应用程序都可以读取Cookie包含的信息。

    相关 javawebEL

    在web应用程序中,视图层的设计技术有许多种,除HTML、JSP,还有JSTL、EL、Ajax技术等。 EL 时表达式语言 JSP页面中输出动态信息有一下三种方法:

    相关 JavaWeb Tomcat

    常见的软件体系结构 C/S结构 C/S结构即客户端/服务器(Client/Server),例如QQ 需要编写服务器端程序,以及客户端程序,例如我们安装的

    相关 JavaWeb 编码

    编码 常见字符编码: ISO-8859-1(不支持中文) GBK(系统默认编码,中国的国标码) UTF-8(万国码,支持全世界的编码,所以我们使用这个)

    相关 JavaWeb HTTP

    安装HTTPWatch `HttpWatch`是专门为IE浏览器提供的,用来查看HTTP请求和响应内容的工具。而FireFox上需要安装`FireBug`软件。如果你使用