0x00前言

1.会话:一次会话中包含了多次请求和响应

2.功能:一次会话的范围内的多次请求间,共享数据

3.方式:

(1)客户端会话技术:cookie

(2)服务端会话技术:Session

0x01Cookie技术

0x1基础方法

response.addCookie(cookie);向客户端发送Cookie
String name = c.getName();获取客户端发来的Cookie的键值对
String value = c.getValue();
Cookie[] cookies = request.getCookies();客户端访问的Cookie提取
cookie.setMaxAge(120);//把Cookie持久化到硬盘存货时间为120秒后自动删除 setMaxage(int i) 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
负数:默认值
零:删除cookie信息
cookie.setPath("/"); //设置共享

尝试的代码

@WebServlet(name = "ServletCookie1", value = "/ServletCookie1")
public class ServletCookie1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response); } @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建cookie对象
Cookie cookie = new Cookie("msg", "hellow");
cookie.setMaxAge(120);
cookie.setPath("/"); //设置共享
response.addCookie(cookie); }
}

获取Cookie代码

@WebServlet(name = "ServletCookie2", value = "/ServletCookie2")
public class ServletCookie2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response); } @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
if (cookies!=null){
for (Cookie c:cookies){
String name = c.getName();
String value = c.getValue();
System.out.println(name+":"+value);
}
} }
}

Cookie的特点和作用

1.特点:Cookie存在客户端浏览器

浏览器对于单个Cookie的大小有限制(4kb)已经对同一个域名下面的总Cookie有限制(20个)

2.作用:Cookie一般用于存储少量的敏感数据

在不登录的情况下,完成服务器对客户端身份的识别

基于时间的Cookie判断

@WebServlet(name = "ServletCookie3", value = "/ServletCookie3")
public class ServletCookie3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response); } @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies();
ServletContext servletContext = this.getServletContext();
response.setContentType("text/html;charset=utf-8"); if (cookies!=null){
for (Cookie cookie:cookies){
String name = cookie.getName();
if ("lasttime".equals(name)){
String value = cookie.getValue();
Date date = new Date();
cookie.setMaxAge(60*60*24*30);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String format = simpleDateFormat.format(date);
String encode = URLEncoder.encode(format, "utf-8");
cookie.setValue(encode);
response.addCookie(cookie);
String value1 = cookie.getValue();
response.getWriter().write("欢迎回来");
break;
}
} }
if (cookies==null|| equals(cookies[0].getName()!="lasttime")){
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String format = simpleDateFormat.format(date);
String encode = URLEncoder.encode(format, "utf-8");
Cookie cookie = new Cookie("lasttime",encode);
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);
response.getWriter().write("欢迎您第一次访问");} }
}

0x02Session技术

1.概念:服务器端会话技术,在一次会话间共享数据,将数据保存在服务器端对象中.HttpSession

2.Session是依赖于Cookie的

3:。Session方法

 request.getSession()     :获取session对象

 session方法:

 Object getAttribute(String name)
void setAttribute(String name, Object value)
void removeAttribute(String name)

细节:

当客户端关闭以后,服务器关闭,两次获取的Seesion是不同的。

原因:在第一次获取session的时候,服务器会自动在内存中创建一个session对象,并把session的id即JSESSIONID通过cookie的形式返回给客户端
客户端在后续访问的时候,都会带着该cookie即JSESSIONID,来访问服务端,服务端根据该id找到对应的session对象,以此来保证一次会话内的多次请求找的都是同一个session
如果客户端关闭的话代表着会话结束了,cookie就不会再携带JESSIONID
HttpSession session = request.getSession();
System.out.println(session);
Cookie cookie = new Cookie("JSEESSIONID",session.getId());
cookie.setMaxAge(60*60);
response.addCookie(cookie);
可以通过在这种给Cookie设置值和延长Cookie的时间去达到这个效果。

客户端不关闭,服务器关闭,两次获取的Seesion是不是一个值

默认的时候不是一个值,但是Tomact会实现Session的钝化和活化,就是序列化和反序列化

如果服务端重启后客户端没关如果Session发生改变的化会导致数据丢失,所有就会出现钝化和活化

钝化:把Session序列化到硬盘上,服务器启动以后将Session文件转化成session对象

0x03总结

Cookied的设置会造成XSS攻击,所以出现了防御机制HttpOnly标志(可选),客户端脚本将无法访问cookie(如果浏览器支持该标志的话)。因此即使客户端存在跨站点脚本(XSS)漏洞,浏览器也不会将Cookie透露给第三方。Cookie和Session后面还会设计到xss和csrf漏洞的利用,还有Cookie注入。

java学习之Cookie与Session的更多相关文章

  1. 第74节:Java中的Cookie和Session

    第74节:第74节:Java中的Cookie和Session ServletContext: 什么是ServletContext,有什么用哦,怎么用呢? 启动服务器后,会给每个应用程序创建一个Serv ...

  2. Java Web之Cookie、Session

    讲Cookie和Seesion之前,先讲一下HTTP连接其实是无序的,服务器不知道是谁在访问它.现在我们来实现一个简单的邮箱功能. 要求: 1.登录页面登录之后看到收件箱和欢迎我 2.点击收件箱看到几 ...

  3. node学习之cookie和session

    c什么是cookie Cookie设计的初衷是 维持浏览器和服务端的状态.http是无状态的,服务端不能跟踪客户端的状态. 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏 ...

  4. PHP学习10——Cookie和Session技术

    主要内容: Cookie技术 创建cookie 查看cookie 读取cookie 用cookie记录访问时间和次数 删除cookie cookie的生命周期 Session技术 session工作原 ...

  5. java基础之----cookie,session,jwt

    概要 web中为什么要引入cookie.session机制,为了验证用户的身份,验证用户的身份是为了系统的安全,那如果是系统和系统之间的API调用怎么办呢?因为系统之间调用往往是没有用户系统的(用户系 ...

  6. Django学习之Cookie和Session

    一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...

  7. Java开发系列-Cookie与Session会话技术

    概述 会话技术:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话.会话技术产生是由于Http请求是一个无状态的协议,它不会记录上次访问的内容,用户在访过程中难免产生一 ...

  8. nodeJs学习-08 cookie、session

    http-无状态的:两次访问之间,无区别,cookie可解决 cookie:在浏览器保存一些数据,每次请求都会带过来: 弊端:可以查看修改,并不安全.大小有限(4K) 读取--cookie-parse ...

  9. Django 学习之cookie与session

    一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

随机推荐

  1. Office宏病毒学习第一弹--恶意的Excel 4.0宏

    Office宏病毒学习第一弹--恶意的Excel 4.0宏 前言 参考:https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-ma ...

  2. 【JDBC】学习路径1-JDBC背景知识

    学习完本系列JDBC课程后,你就可以愉快使用Java操作我们的MySQL数据库了. 各种数据分析都不在话下了. 第一章:废话 JDBC编程,就是写Java的时候,调用了数据库. Java Databa ...

  3. 「题解报告」 P3167 [CQOI2014]通配符匹配

    「题解报告」 P3167 [CQOI2014]通配符匹配 思路 *和?显然无法直接匹配,但是可以发现「通配符个数不超过 \(10\) 」,那么我们可以考虑分段匹配. 我们首先把原字符串分成多个以一个通 ...

  4. docker可视化

    可视化第一种方式 Portainer(不是最佳选择但先用这个) docker run -d -p 8088:9000 \ #docker run 启动:通过内网9000端口,外网8088端口:rest ...

  5. Centos_yum使用

    安装应用 yum install -y xxx -y 表示自动yes 卸载应用 yum -y remove xxx -y 表示自动yes 查看已安装的应用 yum list installed

  6. Oracle PLM,协同研发的产品生命周期管理平台

    官网:Oracle PLM - 方正璞华 适用企业:电子高科技.机械制造.医疗器械.化工行业等大型企业和中小型企业 咨询热线:4006-160-730 申请试用.预约演示.产品询价 邮箱:jiangc ...

  7. 云原生之旅 - 3)Terraform - Create and Maintain Infrastructure as Code

    前言 工欲善其事,必先利其器.本篇文章我们介绍下 Terraform,为后续创建各种云资源做准备,比如Kubernetes 关键词:IaC, Infrastructure as Code, Terra ...

  8. 【项目实战】CNN手写识别

    由于只需要修改之前基于ANN模型代码的模型设计部分所以篇幅较短,简单的加点注释给自己查看即可 视频链接:https://www.bilibili.com/video/BV1Y7411d7Ys?p=10 ...

  9. Elasticsearch集群规模和容量规划的底层逻辑

    转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484628&idx=1&sn=666e416ae ...

  10. 天翼云主机某一IP多次登录失败导致IP被锁无法登录,天翼云主机莫名其妙无法远程登陆

    情况说明: 直接使用该IP通过ssh远程连接失败,但是先通过ssh远程连接其他主机上,然后在这个主机上再ssh刚才连接失败的主机,就能登陆上. 说明,root用户不是被锁了, 而是远程登陆IP被锁了 ...