java基础79 会话管理(Cookie技术、Session技术)
1、概念
会话管理:管理浏览器和服务器之间会话过程中产生的会话数据。
Cookie技术:会话数据保存到浏览器客户端。【存 编号/标记(id)】
Session技术:会话技术会保存到服务器端(内存)。 【存 具体值】
2、Cookie技术(会话数据保存到浏览器客户端)
2.1、Cookie的核心API
1、服务器端创建cookie对象
Cookie cookie=new Cookie(“name”,”value”);
2、设置Cookie
void setPath(java.lang.String uri)
void setMaxAge(int expiry)
void setValue(java.lang.String newValue)
3、把cookie发送给浏览器端;
Response.addCookie(cookie);
4、 浏览器带着cookie信息访问服务器(通过请求头:)
Cookie[] cookies=request.getCookies(); //服务器接收cookie数据
局限:
1、只能保存字符串数据,不能保存中文
2、一个cookie不能超过4kb
2.2、Cookie原理
1)服务器创建cookie对象,把会话数据存储到cookie对象中
New Cookie(“name”,”value”);
2)服务器发送cookie到浏览器
Response.addCookie(cookie);
3)浏览器得到服务器发送的cookie,然后在保存到浏览器端
Cookie:name=rose(隐藏带着叫cookie名称的请求头)
4)服务器接收到浏览器带来的cookie信息
Request.getCookies();
2.3、Cookie的细节
1)SetPath:设置cookie的有效路径。有效路径指保存到哪里,那么浏览器在有效的路径下方访问是就带有cookie信息,否则就不带。
2)setMaxAge(int time):设置cookie的有效时间。
正整数:表示cookie]数据保存到浏览器的缓冲目录(硬盘中),数值表示保存的时间。
负整数:表示cookie保存浏览器的内存中,浏览器关闭cookie就丢失。
零:表示删除同名的cookie数据
3)cookie数据类型值能保存非中文的数据类型。可以保存cookie,但是浏览器一般只允许放300个cookie,每个站点最多只能放20个Cookie,每个cookie的大小限制4Kb
2.4、实例
例1
package com.shore.cookie; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 第一个cookie的程序
* */
public class CookieDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { /*request.setAttribute("name","hello");
request.getRequestDispatcher("GetData").forward(request, response);*/
//创建Cookie对象
Cookie cookie1=new Cookie("name","rose");
//Cookie cookie2=new Cookie("email","1314@qq.com");
/*
* 1)设置Cookie的有效路径:默认情况下,有效路径在当前的web应用下./MyCookie
* cookie.setPath("/MyCookie")
* */
//cookie1.setPath("/MyCookie2");
//response.addCookie(cookie2);
/*
* 2)设置cookie的有效时间
* 正数:表示cookie保存到浏览器的缓存目录(硬盘中),数值表示保存时间
* 负整数:表示cookie数据保存浏览器的内存中.浏览器关闭cookie就失效!!
* 零:表示删除同名的cookie数据
* */
cookie1.setMaxAge(100);
//cookie2.setMaxAge(30);//5秒 从最后步调用cookie开始计算的
//cookie1.setMaxAge(-1);
response.addCookie(cookie1);
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for (Cookie c : cookies) {
String name=c.getName();
String value=c.getValue();
System.out.println("name="+name+";value="+value);
}
}else{
System.out.println("没有接收到cookie数据");
}
}
}
例2
package com.shore.cookie; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class GetData extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*String name=(String)request.getAttribute("name");
System.out.println(name);*/
Cookie[] cookies=request.getCookies();
/*if(cookies!=null){
for (Cookie c : cookies) {
String name=c.getName();
String value=c.getValue();
System.out.println("name="+name+";value="+value);
}
}else{
System.out.println("没有接收到cookie数据");
}*/
}
}
例3
package com.shore.cookie; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DeleteCookie extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { /*
* 需求:删除Cookie
* */
Cookie cookie=new Cookie("name", "xxxx");
cookie.setMaxAge(0);//删除同名cookie
response.addCookie(cookie);
System.out.println("删除成功");
}
}
3、Session技术(会话数据保存到服务器端[内存])
3.1Session的核心API
1、创建和得到Session对象
HttpSession session=Request.getSession(); //创建或者得到Session对象
Request.getSession(false); //得到session对象
2、会话数据保存Session对象中,和得到会话数据
Session.setAttribute(“name”,Object); //保存数据
Session.getAttribute(“name”); //得到数据
注意:
1、session.setMaxInactiveInterval(时间); //设置session过去时间
2、session.invalidate(); //手动销毁session对象
3.2、session细节
1、getId():得到session编号
2、两个getSession方法
1)getSession()/getSession(true):创建或得到session对象。没有匹配的session编号时,会自动创建新的session对象。
2)getSession(false):得到session对象。没有匹配的session编号时,返回null。
3、session对象销毁的时间
3.1、自动销毁session对象
1)默认情况下,为30分钟,过时 浏览器会自动回收
2)修改(设置)session的回收时间。
3)全局修改
| <!-- 修改session的全局有效时间:分钟 --> <session-condig> <session-timeout>时间数字</session-timeout> </session-condig> |
3.2、手动销毁session对象
1)直接调用invalidate();方法
3.3、实例
SessionDemo1.java文件
package com.shore.session; import java.io.IOException; 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 javax.servlet.http.HttpSession; /**
* @author DSHORE / 2018-9-9
*
*/
public class SessionDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //创建session对象
HttpSession session=request.getSession();
//创建cookie对象
Cookie c=new Cookie("JSESSIONID",session.getId());//键值对
session.setMaxInactiveInterval(10); //设置Session的有效时间为10秒
c.setMaxAge(60*60);//3600秒
response.addCookie(c);//把值添加到浏览器的cookie中
session.setAttribute("name","Jack");
System.out.println(session.getId()+"---->SessionDemo1的值");
}
}
SessionDemo2.java文件
package com.shore.session; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; /**
* @author DSHORE / 2018-9-9
*
*/
public class SessionDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //创建session对象
HttpSession session=request.getSession(false);
if(session!=null){
String sessionName=(String)session.getAttribute("name");
System.out.println(sessionName);
System.out.println(session.getId());
}else{
System.out.println("id不对");
}
}
}
结果图

实例解析:
1、第一次访问创建的session对象时,给session对象分配一个唯一的id,叫JSESSIONID。
HttpSession session=request.getSession();
2、把JSESSIONID作为cookie的值发送给浏览器保存。
Cookie c=new Cookie("JSESSIONID",session.getId());
response.addCookie(c);//把值添加到浏览器的cookie中
3、第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器。
4、服务器得到JSESSIONID,并在服务器的内存中搜索是否存在对应编号(id)的session对象。
if(session!=null){
String sessionName=(String)session.getAttribute("name");
System.out.println(sessionName);
System.out.println(session.getId());
}else{
System.out.println("id不对");
}
5、如果找到对应编号的session对象,则直接返回该对象。
6、如果找不到对应编号的session对象,则创建新的session对象,循环第1到底6步(骤)。
结论:通过cookie(浏览器端的请求头)中的JSESSIONID编号,去服务器中寻找session对象对应的值。
|
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/9613620.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
java基础79 会话管理(Cookie技术、Session技术)的更多相关文章
- 会话管理---Cookie与Session
会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 保存会话数据的两种技术:Cookie,Session Cookie是客户端技术, ...
- Java Web之会话管理二:Session
一.Session 在web开发中,服务器可以为每个yoghurt浏览器创建一个会话对象(Session)对象.注意:一个浏览器独占一个Session对象.因此,在需要保存用户数据时,服务器程序可以把 ...
- Java中的会话管理——HttpServlet,Cookies,URL Rewriting(译)
参考谷歌翻译,关键字直接使用英文,原文地址:http://www.journaldev.com/1907/java-session-management-servlet-httpsession-url ...
- Java 中的会话管理—— HttpServlet,Cookies,URL Rewriting(转)
索引 1.什么是 Session? 2.Java 中的会话管理—— Cookie 3.Java Servlet 中的 Session —— HttpSession 理解 JSESSIONID Cook ...
- 理解cookie和session技术
一.HTTP协议的无状态性 WEB应用程序使用的是HTTP协议传输数据的,HTTP协议是一个无状态的协议,这次数据传输完毕,客户端会和服务端断开连接,再次传输数据就需要重新建立新的连接,这也就无法会话 ...
- 管理Cookie和Session
管理Cookie和Session 前言 这几天中,一直再跟漏洞打交道,而在这些漏洞中,出现的最多的就是 Cookie 和 Session 了.这篇文章就简单的介绍一些 Cookie 中最常用的四个属性 ...
- JAVA基础之会话技术-Cookie及Session
至此,学习Servlet三个域对象:ServletContext(web项目).request(一次请求).Session(一个客户端)!均有相同的方法! 从用户开始打开浏览器进行操作,便开始了一次会 ...
- Java Web之会话管理一: 使用Cookie进行会话管理
一.Cookie的概念 Cookie(会话)可以简单的理解为:用户开一个浏览器,点击多个链接,访问服务器多个web资源,然后关闭浏览器,整个过程称为一个会话. 二.会话过程中解决的问题 用户在使用浏览 ...
- C#基础知识之理解Cookie和Session机制
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
随机推荐
- Go interface{}、类型断言
在 golang 中 interface{} 可用于向函数传递任意类型的变量, 但在函数内部使用的话, 该变量的类型就是 interface{}, 也称为空接口类型 比如我们定义一个函数, 输出字符串 ...
- Java考试题之九
QUESTION 177 Given: 1. class TestException extends Exception { } 2. class A { 3. public ...
- 2018.9.20 Educational Codeforces Round 51
蒟蒻就切了四道水题,然后EF看着可写然而并不会,中间还WA了一次,我太菜了.jpg =.= A.Vasya And Password 一开始看着有点虚没敢立刻写,后来写完第二题发现可以暴力讨论,因为保 ...
- python 生成器和迭代器介绍
在正式接触生成器之前,我们先来了解一些概念 容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个迭代获取,可以用in.not in关键字判断元素是否包含在容器中. ...
- python常用模块(3)
ConfigParser模块学习 ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每个节可 ...
- java反射机制的理解
反射机制是什么概念?大多都有介绍,指的是程序在运行状态中,能够加载一个只有类名的类,加载完之后会在堆上产生一个Class对象.通过这个 Class对象可以获得类的属性.方法和其他类信息.之前对反射的应 ...
- Broker流量均衡 prefer reassign
0.均衡流量的步骤 现在的kafka集群,只要遇到过weibo_common_act2 topic的节点在ZK中丢失,就要prefer一次流量,否则不均匀. 总结均衡流量的一般步骤: 通过hpm查询b ...
- NGINX生产环境反向代理到后端tomcat配置
#当访问www.kazihuo.com//sichuan-user-te时,跳转到http://10.1.93.61:7005/sichuan-user server { listen ; serve ...
- 【转】Elastic日报 第576期 (2019-04-05)
1.Elasticsearch性能测试实践http://t.cn/EiRzFiI2.监控Elasticsearch的插件推荐http://t.cn/EiRzFix3.支持机器数据的可扩展Elastic ...
- Metrics.Net实践(2)在WEB中应用度量
Gauges 可以画出Http Request执行时间的波形图: actionInfo表示MVC中的Action,即按照action类型来分组 Metric.Context(this.actionIn ...