一、cookie VS session

1)应用场景

cookie可以用于:

记录用户上次登录的时间

记住用户名和密码

session可以用于:

防止非法登录(即直接跳转到本来需登录验证方可登录的页面)

用户登录时输入的验证码是否正确

购物车功能,如果结合cookie,还能够实现,当浏览器关闭,下一次打开的时候,购物车中的物品依旧存在

2)存储位置

cookie由服务器端写入,存在于客户端的临时文件夹,可以被多个浏览器所共享。

session存在于服务器的内存中,因此不要向其中放太多东西,一个session对应于一个浏览器,因此,一个session域对象为一个用户浏览器服务

3)安全性

cookie是以明文方式保存在客户端,可以通过md5加密之后再存放

session存放在服务器的内存中,安全性相对较好

4)网络传输量

cookie会传递信息给服务器,session的属性不会给客户端,不存在网络传输问题

5)生命周期

cookie的生命周期是累计的,从创建时就开始计时,如果设定20分钟,那么20min后cookie就会失效。cookie的默认生命周期是会话周期,关闭浏览器之后,cookie销毁。如果setMaxAge(0),就是直接删除该cookie,如果setMaxAge(负数),则是浏览器关闭时候销毁(相当于默认a)

session的生命周期是间隔的(发呆),如果设定其生命周期为20min,那么只有20分钟内没有访问该session,才会失效
在以下情况下,session也会失效:
  a.关闭服务器
  b.web应用reload
  c.时间到了
  d.调用了session的invalide方法
注意:session创建通过request.getSession()《如果有就获得,如果没有就会创建》,保存一直在服务器端,因此其生命周期和客户端的操作无关,不管是否打开或者关闭浏览器,都不会对其生命周期带来任何影响;只能通过session.setInter...Time来指定

6)cookie和session之间的联系

a.cookie和session都是由服务器端创建,不同在于cookie通过response.addCookie()输出到客户端保存在约定的文件夹中,而session则一直存在于服务器端

b.session在创建的时候,服务器会同时创建一个cookie,保存对应的JSESSIONID;之后每一次关于session的操作,客户端浏览器都会向服务器发送该JSESSIONID,该cookie的生命周期为一个会话周期(即session在浏览器关闭的时候销毁)。这是session能够在http无状态的条件下,识别一系列请求属于一个会话的关键。因此,如果想要实现关闭浏览器,打开购物车,里面物品依旧存在的功能,对应方法就是,创建一个cookie,对应的key和value按照session的规矩定,并设定其生命周期。

Cookie cookie=new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*30);
response.addCookie(cookie);

其他知识点补充:

1)cookie中保存中文乱码

解决方法:利用urlEncoding和urlDecoding对中文部分进行编码和解码

2)利用url重写来解决cookie禁用的情况下使用session的问题,此时JSESSIONID会通过queryString来传递

response.encodeURL("初始的url");
不过这之前需要调用一下session,很简单,一句话
request.getSession()

二、servletContext

1)应用场景

网站显示当前浏览者为第几位

网站显示有多少人在线(如果想要保证网站重启等情况下,数据不丢失,可以后台开启线程,没过一段时间,将对应数据写入文件系统中)

2)说明

servletContext是在服务器端

servletContext被所有的客户端所共享

生命周期:servletContext是当web应用启动的时候,自动创建,在web应用关闭的时候销毁

3)应用方法

1)获取web应用的参数,如数据库连接相关的常数,在web.xml中配置<context-param>参数
2)读取资源文件

a.读取文件
资源文件在webRoot目录下
this.getServletContext().getResourseAsStream()
b.获取文件路径
获取文件在本地资源系统的而绝对路径,如在webRoot目录下放置一个文件
this.getServletContext().getRealPath()
c,如果文件放置在src路径下,使用上述方法是读不出来的,必须使用类加载器,类加载器去读取资源的默认路径是src主目录

cookie&session&servletContext的更多相关文章

  1. Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期

    servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...

  2. Web---session技术代码演示(request,session,servletContext)

    Session会话简介与基本知识点 当浏览器第一次访问服务器时,无论先访问哪一个页面,服务器就会给用户分配一个唯一的会话标识,即jsessionid然后以cookie的形式返回给用户. 会话是指在一段 ...

  3. Cookie&Session&Jsp总结

    知识点梳理 Cookie&Session&Jsp 1 会话技术 1.1 会话管理概述 1.1.1 会话技术介绍 会话:浏览器和服务器之间的多次请求和响应 (一次对话) 为了实现一些功能 ...

  4. JavaWeb请求与响应 Cookie&Session

    1.请求与响应 &Cookie&Session 1.1.请求与响应 HTTP协议 概念:英文全称:HyperText Transfer Protocol 中文全称:超文本传输协议   ...

  5. cookie,session,sessionid

    cookie,session,sessionid http协议是无状态的,意思是每次请求的状态不会保存.因此,产生了cookie,session之类保存会话状态的机制.1.什么是cookiecooki ...

  6. 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法

    单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...

  7. 会话Cookie及session的关系(Cookie & Session)

    会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...

  8. cookie,session,token的定义及区别

    参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...

  9. Java web学习 Cookie&&Session

    cookie&&session 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会 话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Coo ...

随机推荐

  1. PHP 错误与异常 笔记与总结(2)错误(Fatal)

    (接上) d.Fatal error 致命级别的错误 —— 程序终止执行 [例7]调用一个未定义的方法 <?php echo md6('dee'); echo 'continue'; 输出: ( ...

  2. ThinkPHP 学习笔记 ( 二 ) 控制器 ( Controller )

    /** * ThinkPHP version 3.1.3 * 部署方式:应用部署 * 文内的 http://localhost/ 由实际主机地址代替 */ 入口文件 index.php: <?p ...

  3. 下载、运行docker

    Get the Linux binary To download the latest version for Linux, use the following URLs: https://get.d ...

  4. PHP面向对象程序设计的61条黄金法则

    PHP面向对象程序设计的61条黄金法则   你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚.但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起 . ----- Arthur J.R ...

  5. DirectX基础学习系列2

    补充第一章矩阵内容 向量 1 3D空间向量,包含浮点数类型坐标 D3DXVECTOR-->D3DXVECTOR3 2向量的长度 D3DXVector3Length(const D3DXVECTO ...

  6. vi 整行 多行 复制与粘贴

    vi编辑器中的整行(多行)复制与粘贴就非常必要了. 1.复制 1)单行复制 在命令模式下,将光标移动到将要复制的行处,按“yy”进行复制: 2)多行复制 在命令模式下,将光标移动到将要复制的首行处,按 ...

  7. tableView在加载数据成功之前先展示了footerView-医生工作台1期

    一进入这个页面先显示了footreView   解: 发现先走的requestData,但是请求接口成功的回调没走,走了configUI   configUI之后,走了requestData   所以 ...

  8. hdf第一周完了,突然时间静止.,醒了就早点去公司上班,再努力一点

    周一要了个任务,做评价完成,分享完成的页面,做到周四发现可能做不出来,找dzy,逻辑比较混乱,想要放弃了,感觉自己非常没用.昨天跟豆聊了一下,否定自己是一点意义也没有的,觉得自己很差劲,无助的感觉跟初 ...

  9. Git相关的项目

    1.posh-git Git的PowerShell扩展 项目地址: https://github.com/dahlbyk/posh-git 可以用psget快速安装扩展模块,psget下载安装地址 h ...

  10. 【转】如何使php的MD5与C#的MD5一致?

    有c#生成MD5的代码如下: class CreateMD5 { static void Main(string[] args) { string source = "提问指南"; ...