一、会话技术之Cookie

Cookie技术是将数据存储到客户端

1.怎样去向客户端写出一个cookie

1)创建Cookie对象

Cookie cookie = new Cookie(name,value);

2)向客户端写出cookie

response.addCookie(cookie );

客户端:客户端解析http响应,响应头中有一个cookie,客户端会自动将cookie的信息存储到客户端的缓存中

2.怎样从客户端获取一个Cookie

1)获得客户端携带的所有的cookie

Cookies[]  request.getCookies();

2)获得具体的某个cookie

遍历所有的cookie

通过getName()获得某一个cookie的名字

通过getValue()获得某一个cookie的值

3.显示用户上次的访问时间

4.设置Cookie时的细节

1)会话级别的cookie和持久级别的cookie

会话级别的cookie:会话结束cookie就清空

持久级别的cookie:会cookie存储到磁盘上

保存在磁盘上的时间

cookie.setMaxAge(秒);

注意:如果要想删除磁盘已经存储的cookie

将同名的cookie的持久化时间设置为0

将要删除的cookie的路径设置成与磁盘上存储的cookie的路径一致(即两个cookie的setPath一致)

2)设置cookie的携带的路径

cookie在默认情况下 会在产生的cookie资源的所在的目录下都携带

http://localhost/testweb_fr/accessTime

访问http://localhost/testweb_fr/下的所有的资源都携带

http://localhost/testweb_fr/abc/accessTime

访问http://localhost/testweb_fr/abc下的所有的资源都携带

cookie.setPath(携带cookie的路径);

设置cookie的携带路径时以/开头,/代表本web服务器

例如:

cookie.setPath(“/”), cookie在访问web服务器下的所有资源的都携带

cookie.setPath(“/testweb_fr”),在testweb_fr应用时携带cookie

cookie.setPath(“/testweb_fr/abc”),访问这个testweb_fr应用下的 abc目录下的资源时才携带cookie

cookie.setPath(“/testweb_fr/abc/accessTime”),只有访问accessTime 才携带cookie

3)设置三方cookie(了解)

cookie.setDomain(域名);

三方cookie具有进攻性

5.以上代码实现

response.setContentType("text/html;charset=UTF-8");

//1、创建时间的Cookie

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String accessTime = format.format(new Date());

Cookie cookie = new Cookie("accessTime",accessTime);

//1.1 设置cookie的持久化的时间----在磁盘上存储的时间

//cookie.setMaxAge(60*10);

//1.2 设置cookie的携带路径  /代表web应用

cookie.setPath("/testweb_fr/abc/accessTime");

//2、将cookie写给客户端

response.addCookie(cookie);

//3、获取客户端携带的时间的cookie

String accessTime_client = null;

Cookie[] cookies = request.getCookies();

if(cookies!=null){

for(Cookie coo:cookies){

//取出美哟个cookie对象的名字

String cookieName = coo.getName();

if("accessTime".equals(cookieName)){

//取出该cookie的值

accessTime_client = cookie.getValue();

}

}

}

//4、为用户显示上次访问时间

if(accessTime_client!=null){

response.getWriter().write("您的上一次访问时间是: "+accessTime_client);

}else{

//第一次访问

response.getWriter().write("您是第一次访问");

}

二、会话技术之Session

1.怎样去创建session/获得session

HttpSession session = request.getSession();

上述方法的内部原理:

当request在调用getSession方法时,内部会去查看一下该用户是否在web应用的内部存在一块内存区域,如果有直接返回这个内存区域的地址,如果没有就创建一个新的session区域

服务器端通过什么判断用户是否已经存在session的呢?

根据session的编号id--->JSESSIONID

2.session的生命周期

创建:第一次调用request.getSession()

销毁:

1)服务器关闭 session销毁

2)session超时 默认30分钟

计算点从何时开始:最后一次操作该站点后的30分钟

3)手动销毁session

session.invalidate();

3.Session是一个域对象

 
   

Session是借助于Cookie的,同一个Session的标志就是JSESSIONID相同。

如果将浏览器关闭,在打开访问资源,会重新创建session

怎样将session持久化----->存储JSESSIONID的Cookie持久化

抓包工具获得:(抓包工具我用的是httpwatch)

Set-Cookie: JSESSIONID=6232D4782FC69B1D780261E93DFA5FBB; Path=/testweb_fr/;

手动创建一个Cookie 在上面的cookie的基础上 多一个max-age

如果客户端禁用Cookie,客户端不能在存储Cookie,JSESSIONID丢失,解决?

解决方案:URL重写,在每个url地址后都使用分号;拼接JSESSIONID

response.ecodeURL()

response.ecodeRedirectURL()

http://localhost/testweb_fr/index.jsp;jsessionid=377B2F0501FF9FE643D7D88F4E883FFD

web基础之会话技术的更多相关文章

  1. Web基础知识和技术

    WEB是一个外延广泛的概念,不单单指网站,乌徒帮专注拥有WEB界面的网站开发,帮助初学者或已经进入开发的朋友们提供参考讨论平台,然而并不一定能将所有的WEB知识讲全讲透,只是能满足初涉者的建站需求,能 ...

  2. JAVA基础之会话技术-Cookie及Session

    至此,学习Servlet三个域对象:ServletContext(web项目).request(一次请求).Session(一个客户端)!均有相同的方法! 从用户开始打开浏览器进行操作,便开始了一次会 ...

  3. Web核心之会话技术Cookie&Session

    什么是会话技术? http协议是无状态协议.为了满足在多次请求之间数据进行交互,推出了会话技术. 会话概念:一次会话,指的是从客户端和服务器建立起连接开始,到客户端或服务器断开连接为止.中间可能进行多 ...

  4. Asp.NetCore Web开发之会话技术

    这节讲一下会话技术,首先了解一下什么是会话,会话是指浏览器打开到关闭的过程中,多次与服务器发送接收数据的过程. 由于HTTP是无状态协议,一次请求响应过后,产生的数据就随之释放了,可是在某些情况下,我 ...

  5. web基础笔记整理(一)

    一.程序的分层 1.界面层: 某种类型的应用程序 a.DOS(控制台运行) b.桌面应用程序--独立安装,独立运行 c.web类型--现在流行的 单机版:电脑上要安装,程序升级之后,电脑上也要升级-- ...

  6. 2017-2018-2 20155314《网络对抗技术》Exp8 Web基础

    2017-2018-2 20155314<网络对抗技术>Exp8 Web基础 目录 实验内容 实验环境 基础问题回答 预备知识 实验步骤 1 macOS下Apache的配置 2 macOS ...

  7. 2017-2018-2 《网络对抗技术》20155322 Exp8 web基础

    [-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实践过程 2.1-Web前端HTML 2.2-Web前端javascipt 2.3-Web后端 2.4 ...

  8. 2018-2019-2 网络对抗技术 20165318 Exp 8 Web基础

    2018-2019-2 网络对抗技术 20165318 Exp 8 Web基础 原理与实践说明 实践内容概述 基础问题回答 实践过程记录 1.Web前端:HTML 2.Web前端:javascipt ...

  9. 2018-2019 2 20165203 《网络对抗技术》Exp8 Web基础

    2018-2019 2 20165203 <网络对抗技术>Exp8 Web基础 实验要求 1.本实践的具体要求有: (1) Web前端HTML(0.5分) 能正常安装.启停Apache.理 ...

随机推荐

  1. java 8 Hashmap深入解析 —— put get 方法源码

    每个java程序员都知道,HashMap是java中最重要的集合类之一,也是找工作面试中非常常见的考点,因为HashMap的实现本身确实蕴含了很多精妙的代码设计. 对于普通的程序员,可能仅仅能说出Ha ...

  2. require.js与sea.js的区别

    hi,感谢各位读者能够阅读我的文章. 下面为大家讲解一下require.js和sea.js的区别.纯属个人意见,不喜勿喷. 首先原理上的区别 sea.js遵循CMD规范.书写方式类似node.js的书 ...

  3. iOS 历史浏览网页的定向跳转

    在实际的开发过程中,涉及到交互的问题,原生和H5的网页相互嵌套,直接造成跳转的混乱,混乱就应该指定的历史记录中,就需要网页的一些相关的一些属性问题 需要在webview里面的代理方法中执行相对应的操作 ...

  4. iOS 中的单例设计模式

    单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单 ...

  5. Where T:Class,new()的使用

    当我们使用泛型的时候,有时候就会提示我们T必须是引用类型而无法进行下去,其实我们学泛型的时候也应该了解到这个T的使用场合,他可以是值类型也可以是引用类型,但是我们某些场合就只能使用引用类型比如EF中的 ...

  6. 推荐virtualBox虚拟机及安装使用的注意事项

    推荐选择virtualBox虚拟机 选择vbox是因为,本人觉得使用起来比VMware要方便. 简要说明: 本人自学前端开发,对于linux了解很少,直接上手真实的linux环境会很不适应,所以选择了 ...

  7. 老李分享:Web Services 组件 2

    WSDL 是一种基于 XML 的语言,它用来对 web service 及其如何访问进行描述. WSDL 表示 web service 描述语言(Web Services Description La ...

  8. ARM中断处理过程

    以s3c2440  ARM9核为例: 一:s3c2440 ARM处理器特性: 1.S3C2440支持个中断源,含子中断源: 2.ARM9采用五级流水线方式: 3.支持外部中断和内部中断: 二.s3c2 ...

  9. Sitemesh 3 配置和使用(最新)

    Sitemesh 3 配置和使用(最新) 一 Sitemesh简介 Sitemesh是一个页面装饰器,可以快速的创建有统一外观Web应用 -- 导航 加 布局 的统一方案~ Sitemesh可以拦截任 ...

  10. Selenium Grid2

    简介 使用selenium-grid可以远程执行测试的代码,核心步骤:grid --> server-->chromedriver驱动 -->chrome浏览器 利用Selenium ...