什么是Cookie?

Cookie是Web服务器保存在客户端的一系列文本信息。

Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

Cookie不是JSP的内置对象,使用前需要通过关键字new出来。

Cookie保存的都是文本信息。

Cookie是在 客户端发挥作用。

Cookie的作用:

  • 对特定对象的追踪。
  • 统计网页浏览次数。
  • 简化登录。

安全性能:

容易泄露信息。

Cookie的语法:

设置Cookie属性的常用方法:


Cookie注意细节:

  1. 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
  2. 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
  3. 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
  4. 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie

Cookie实例练习:

<%
//Cookie不是内置对象
//Cookie保存的都是文本信息
//Cookie是在客户端发挥作用
//创建cookie对象
Cookie cookie = new Cookie("uname", "");
cookie.setValue("xiaozhang");
//设置有效期:setMaxAge
//默认有效期是当浏览器关闭以后就没了
//访问期间一直存在,关闭浏览器和偶结束,就没了。
cookie.setMaxAge(50);
//保存到cookie当中
response.addCookie(cookie);
//获取cookie
String uname=null;
Cookie[] cookies = request.getCookies();
if (cookies != null) { for (int i = 0; i < cookies.length; i++) {
//获取Cookie的名称:getName
if ("uname".equals(cookies[i].getName())) {
//getValue获取Cookie的值
uname=cookies[i].getValue();
}
}
}
%>

Cookie中存取中文:

要想在cookie中存储中文,那么必须使用URLEncoder类里面的encode(String s, String enc)方法进行中文转码,例如:

Cookie cookie = new Cookie("userName", URLEncoder.encode("这是中文", "UTF-8"));
response.addCookie(cookie);

/在获取cookie中的中文数据时,再使用URLDecoder类里面的decode(String s, String enc)进行解码,例如:

URLDecoder.decode(cookies[i].getValue(), "UTF-8")

什么是会话(Session)?

在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

会话机制:session是一种存储机制的对象。 只要浏览器关闭就失效。

session:整个访问一次服务器的机制。有效期最长30分钟左右。

Session是JSP内置对象,与浏览器一一对应。允许用户存储和提取会话状态的信息。

session:存储一次会话范围内的所有数据,除非关闭浏览器(或超过有效期最长时间),会话才会结束

Session语法:

Session常用方法:


Session与浏览器窗口的关系:


session对象的创建和销毁时机

session对象的创建时机

在程序中第一次调用request.getSession()方法时就会创建一个新的Session,可以用isNew()方法来判断Session是不是新创建的.

 1 //使用request对象的getSession()获取session,如果session不存在则创建一个
2 HttpSession session = request.getSession();
3 //获取session的Id
4 String sessionId = session.getId();
5 //判断session是不是新创建的
6 if (session.isNew()) {
7 response.getWriter().print("session创建成功,session的id是:"+sessionId);
8 }else {
9 response.getWriter().print("服务器已经存在session,session的id是:"+sessionId);
10 }

session对象的销毁时机

session对象默认30分钟没有使用,则服务器会自动销毁session,在web.xml文件中可以手工配置session的失效时间.

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app version="2.5"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
7 <display-name></display-name>
8
9 <welcome-file-list>
10 <welcome-file>index.jsp</welcome-file>
11 </welcome-file-list>
12
13 <!-- 设置Session的有效时间:以分钟为单位-->
14 <session-config>
15 <session-timeout>15</session-timeout>
16 </session-config>
17
18 </web-app>

 当需要在程序中手动设置Session失效时,可以手工调用session.invalidate方法,摧毁session。

 

1 HttpSession session = request.getSession();
2 //手工调用session.invalidate方法,摧毁session
3 session.invalidate();

Session实例练习:

<%
User user=(User)session.getAttribute("user");
if(user!=null) {
response.sendRedirect("welcome.jsp");
}
%>
<%
String uname=request.getParameter("uname");
String pwd=request.getParameter("pwd");
//验证用户名密码
if("admin".equals(uname)&&"123456".equals(pwd)) {
//登录成功
User user=new User(uname,pwd);
//保存会话中的数据
session.setAttribute("user", user);
//跳转到欢迎页面
response.sendRedirect("welcome.jsp");
} else {
//登录失败
}
%>

Cookie与Session的比较:

  • Session是在服务器端保存用户信息。 Cookie是在客户端保存信息。

  • session中保存的是对象,Cookie保存的是字符串。

  • session随会话结束而关闭,Cookie可以长期保存在客户端。

  • Cookie通常用于保存不重要的用户信息,重要的信息是由session保存。

  • Session是内置对象,Cookie不是内置对象。

  • Session可以直接在JSP页面使用,Cookie需要new出来。

  • Cookie是把用户的数据写给用户的浏览器。

  • Session技术把用户的数据写到用户独占的session中。

  • Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。


部分精华转自博客:孤傲苍狼

原文地址:

http://www.cnblogs.com/xdp-gacl/tag/JavaWeb%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/

十分感谢此博客博主!

JavaWeb——Cookie,Session学习汇总的更多相关文章

  1. JavaWeb -cookie&session&application

    cookie&session&application总结 Cookie[key-value](不是内置对象必须new): 1. Cookie 是由服务端生成的,在发送给客户端保存 2. ...

  2. JavaWeb Cookie,Session

    Cookie 1.Cookie翻译过来是饼干的意思.Cookie是服务器通知客户端保存键值对的一种技术.客户端有了Cookie 后,每次请求都发送给服务器.每个Cookie的大小不能超过4kb. 2. ...

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

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

  4. JavaWeb:Cookie处理和Session跟踪

    JavaWeb:Cookie处理和Session跟踪 Cookie处理 什么是Cookie Cookie 是存储在客户端计算机上的文本文件,保留了各种跟踪信息.因为HTTP协议是无状态的,即服务器不知 ...

  5. Serlvet之cookie和session学习

    HTTP 协议 Web通信需要一种语言,就像中国人讲中文,欧美说英文,Web使用的HTTP协议,也叫超文本协议. 使用HTTP协议的人分为两类:客户端和服务端.请求资源的角色是客户端,提供资源的是服务 ...

  6. Java web学习 Cookie&&Session

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

  7. node学习笔记9——cookie,session相关操作

    下面讲的都是基Express及相关的包.所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包. 先简单说一下,如何用Expr ...

  8. Python Web学习笔记之Cookie,Session,Token区别

    一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...

  9. JavaWeb基于session和cookie的数据共享

    在了解session和cookie技术之前,我们需要先了解一下什么是会话?会话可以简单理解为用户打开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程称为一个会话.这样, ...

随机推荐

  1. JavaDailyReports10_08

    ------------恢复内容开始------------ AWT组件 1.1Frame组件与Panel组件 1.1.1显示框架窗口 1 package awt; 2 3 import java.a ...

  2. JavaDailyReports10_06

    今日收获: 一.所有引用类型变量的初始化一定要使用new 关键字定义声明,空指针异常的错误原因可能是变量没有初始化导致的. 每一个类体的数据成员一定要在实例化的同时赋值,用一个实例化的类实现问题中最小 ...

  3. JVM 分代GC策略分析

    JVM 分代GC策略分析   我们以Sun HotSpot VM来进行分析,首先应该知道,如果我们没有指定任何GC策略的时候,JVM默认使用的GC策略.Java虚拟机是按照分代的方式来回收垃圾空间,我 ...

  4. 编写高质量JAVA代码之让接口的职责保持单一

    上述标题读者朋友应该也注意到了是让接口的职责保持单一,而不是实现者单一. 设计模式六大原则之单一原则: 定义 不要存在多于一个导致类变更的原因.**通俗的说,即一个类只负责一项职责. 下面以一个电话模 ...

  5. LVS之1---工作原理

    LVS之1---工作原理 LVS 介绍 LVS:Linux Virtual Server,Linux虚拟服务器,负载调度器,是一个由章文嵩(花名 正明)博士从1998年开始发起的自由软件项目. 软件作 ...

  6. Kubernetes官方java客户端之四:内部应用

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. Flink学习之路(一)Flink简介

    一.什么是Flink? Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能. 二.Flink特点 1.现有的开源计算方案,会把流处 ...

  8. spring*.xml配置文件明文加密

    spring*.xml配置文件明文加密 说明:客户要求spring*.xml中Oracle/Redis/MongoDB的IP.端口.用户名.密码不能明文存放,接到需求的我,很无奈,但是还是的硬着头皮搞 ...

  9. 第9章 集合处理(数组、Map、Set)

    目录 1. 数组 1.1 创建数组 1.2 在数组两端添加删除元素 1.3 在数组任意位置添加.删除元素 delete删除数组元素无效 使用splice方法增.删.改元素 1.4 数组的常用操作 数组 ...

  10. 最新最简洁Spring Cloud Oauth2.0 Jwt 的Security方式

    因为Spring Cloud 2020.0.0和Spring Boot2.4.1版本升级比较大,所以把我接入过程中的一些需要注意的地方告诉大家 我使用的版本是Spring boot 2.4.1+Spr ...