文章目录

  • 1. 会话
  • 2. 保存会话的两种技术
  • 3. Cookie
  • 4. Session(重点)

1. 会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话;
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话;

一个网站,怎么证明你来过?
客户端——服务端

  • 服务端给客户端一个 信件,客户端下次访问服务端带上信件就可以了; cookie
  • 服务器登记你来过了,下次你来的时候我来匹配你; seesion

2. 保存会话的两种技术

cookie

  • 客户端技术 (响应,请求)

session

  • 服务器技术,利用这个技术,可以保存用户的会话信息, 我们可以把信息或者数据放在Session中!

常见:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!

举例详细说明:

3. Cookie


(1)从请求中拿到cookie信息

(2)服务器响应给客户端cookie

Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie

cookie:一般会保存在本地的 用户目录下 appdata;

一个网站cookie是否存在上限!聊聊细节问题

  • 一个Cookie只能保存一个信息;
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;
  • Cookie大小有限制4kb;
  • 300个cookie浏览器上限

删除Cookie:

  • 不设置有效期,关闭浏览器,自动失效;
  • 设置有效期时间为 0 ;

编码解码:
URLEncoder.encode(“帅币”,“utf-8”)
URLDecoder.decode(cookie.getValue(),“UTF-8”)

案例测试:

  • 在java包下创建一个名为CookieDemo01文件
package com.zz.servlet;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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//服务器,告诉你,你来的时间,把这个时间封装成为一个 信件,你下带来,我就知道你来了//解决中文乱码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");PrintWriter out = resp.getWriter();//Cookie,服务器端从客户端获取呀;Cookie[] cookies = req.getCookies(); //这里返回数组,说明Cookie可能存在多个//判断Cookie是否存在if (cookies!=null){//如果存在怎么办out.write("你上一次访问的时间是:");for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];//获取cookie的名字if (cookie.getName().equals("lastLoginTime")){//获取cookie中的值long lastLoginTime = Long.parseLong(cookie.getValue());Date date = new Date(lastLoginTime);out.write(date.toLocaleString());}}}else {out.write("这是您第一次访问本站");}//服务给客户端响应一个cookie;Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");//cookie有效期为1天cookie.setMaxAge(24*60*60);resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
  • 在web.xml 文件中注册:
<servlet><servlet-name>CookieDemo01</servlet-name><servlet-class>com.zz.servlet.CookieDemo01</servlet-class></servlet><servlet-mapping><servlet-name>CookieDemo01</servlet-name><url-pattern>/c1</url-pattern></servlet-mapping>
  • 测试访问结果:

4. Session(重点)

什么是Session:

  • 服务器会给每一个用户(浏览器)创建一个Seesion对象;
  • 一个Seesion独占一个浏览器,只要浏览器没有关闭,这个Session就存在;
  • 用户登录之后,整个网站它都可以访问!–> 保存用户的信息;保存购物车的信息……

Session和cookie的区别:

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

使用场景:

  • 保存一个登录用户的信息;
  • 购物车信息;
  • 在整个网站中经常会使用的数据,我们将它保存在Session中。

Session创建的时候做了如下事情:

  • Cookie cookie = new Cookie(“JSESSIONID”,sessionId); //创建cookie
  • resp.addCookie(cookie); //把cookie响应回去

(1)创建Session:

session.setAttribute("name",new Person("帅币",17));
  • 在java包下创建一个名为SessionDemo01文件:
package com.zz.servlet;import com.zz.pojo.Person;import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;public class SessionDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//给Session中存东西session.setAttribute("name",new Person("帅币",17));//获取Session的IDString sessionId = session.getId();//判断Session是不是新创建if (session.isNew()){resp.getWriter().write("session创建成功,ID:"+sessionId);}else {resp.getWriter().write("session已经在服务器中存在了,ID:"+sessionId);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
  • 在web.xml 文件中注册:
<servlet><servlet-name>SessionDemo01</servlet-name><servlet-class>com.zz.servlet.SessionDemo01</servlet-class></servlet><servlet-mapping><servlet-name>SessionDemo01</servlet-name><url-pattern>/s1</url-pattern></servlet-mapping>
  • 测试访问结果:

    (2)获取Session里的内容:

     session.getAttribute("name");
    
  • 在java包下创建一个名为SessionDemo02文件:

package com.zz.servlet;import com.zz.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 SessionDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//取Session中存东西Person person = (Person) session.getAttribute("name");System.out.println(person.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
  • 在web.xml 文件中注册:
<servlet><servlet-name>SessionDemo02</servlet-name><servlet-class>com.zz.servlet.SessionDemo02</servlet-class></servlet><servlet-mapping><servlet-name>SessionDemo02</servlet-name><url-pattern>/s2</url-pattern></servlet-mapping>
  • 在java文件下创建一个实体类 pojo

    Person里的代码为:
package com.zz.pojo;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
  • 测试访问结果:

(3)手动注销Session

session.invalidate();
  • 在java包下创建一个名为SessionDemo03文件:
package com.zz.servlet;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 SessionDemo03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();session.removeAttribute("name");//手动注销Sessionsession.invalidate();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
  • 在web.xml 文件中注册:
<servlet><servlet-name>SessionDemo03</servlet-name><servlet-class>com.zz.servlet.SessionDemo03</servlet-class></servlet><servlet-mapping><servlet-name>SessionDemo03</servlet-name><url-pattern>/s3</url-pattern></servlet-mapping>
  • 测试访问结果:



不手动注销的话,可在web.xml配置中设置会话自动过期时间:

<!--设置Session默认的失效时间-->
<session-config><!--15分钟后Session自动失效,以分钟为单位--><session-timeout>15</session-timeout>
</session-config>

JavaWeb(七)——Cookie、Session相关推荐

  1. 七天免登录(Cookie+session)+ 页面显示动画人物效果(萌娘+气泡效果)+购物车的实现代码

    一.七天免登录(Cookie+session),基于实现jsp页面 页面效果:勾选7天免登录复选框,输入用户名和密码,点击登录即可,登录后可在cookie中查看用户登录信息,以及用户过期时间 1.登录 ...

  2. 【PHP】走进 PHP 第七课 Cookie Session

    [PHP]✔️走进 PHP✔️ 第七课 Cookie & Session 概述 Cookie 如何查看 Cookie 写入 Cookie 读取 Cookie Session 创建 Sessio ...

  3. JavaWeb中的Session、SessionListener、在线人数统计

    2019独角兽企业重金招聘Python工程师标准>>> JavaWeb中的Session 在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话. ...

  4. java重定向cookie_在java中,JSP重定向,转发,Cookie,session

    //第一种情况,先增加Cookie后重定向,A2.jsp能正常获取name的值"你好" //Cookie c=new Cookie("name",URLEnco ...

  5. 彻底理解cookie,session,localStorage(附代码)

    2019独角兽企业重金招聘Python工程师标准>>> 1. cookie 1.1 什么是cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某 ...

  6. 2、cookie session token详解

    cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, ...

  7. 基于requests模块的cookie,session和线程池爬取

    基于requests模块的cookie,session和线程池爬取 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三"人人网"个人主页数据)时,如果使用之前req ...

  8. .net session 有效时间_Python中requests模拟登录的三种方式(携带cookie/session进行请求网站)...

    这篇文章主要介绍了python中requests模拟登录的三种方式(携带cookie/session进行请求网站),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋 ...

  9. C# 系统应用之Cookie\Session基础知识及php读取Cookie\Session

    本文主要是毕业设计"个人电脑使用记录清除软件"系列系统应用文章中关于Cookie方面的知识,主要从介绍Cookie的基础知识和PHP关于Cookie\Session两个会话管理机制 ...

最新文章

  1. 总结—什么妖引起的MongoDB副本集初始化失败?
  2. Linux平台下的内存泄漏检测
  3. 8086实时时钟实验(一)——《x86汇编语言:从实模式到保护模式》05
  4. 16 Managing Undo
  5. VS code中使用code runner遇到两例问题之解决:1.输出乱码,2运行无响应(输出)
  6. CycleGAN详解与实现(采用tensorflow2.x实现)
  7. 使用HTML5构建iOS原生APP(2)
  8. GitHub添加SSH-key的步骤
  9. livereload
  10. MATLAB中PI调节器设计,简单的PI控制器的设计.doc
  11. 命令修改本地计算机策略,命令行修改本地组策略_通过命令行从Windows进行本地组管理...
  12. APP色彩搭配方案是由主色、辅助色和点缀色构成
  13. [spark] SparkSQL知识点全集整理
  14. oracle报1405,【案例】Oracle报错ORA-15054 asm diskgroup无法mount的解决办法
  15. 【短视频运营】查找对标账号 ( 关键词搜索 | 第三方工具查找 | 对标账号学习 | 视频文案 | #话题 | 评论内容 | 历史视频 )
  16. google退出中国声明原文【翻译版】
  17. 阿里物联网云平台搭建(一)
  18. 学习逆变(DC-AC)电路和LLC的基本工作原理。
  19. iphone12和iphone11有什么区别?
  20. 怎么给自己的html网页加个密码,密码正确才能显示网页

热门文章

  1. 计算机进阶操作,新手进阶Win7系统操作使用手册
  2. jvm类加载机制_JVM 类加载机制
  3. 15个学习习惯,受益一生(强烈推荐)
  4. 判断直线与线段是否相交,相交则输出交点x轴坐标
  5. SDOI2020游记
  6. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+分块)
  7. 计算机网络校园网建设设计摘要,计算机网络专业论文校园网建设设计.doc
  8. 1 计算机主机里面都有些什么东西,电脑主机箱里头的东西都有什么用?
  9. java自动定义一个map类_自定义实现Map类 高效版
  10. 20220401 A满秩,B满秩,AB一定满秩