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通过在服务器端 ...
随机推荐
- Java考试题之七
QUESTION 150 Click the Exhibit button. Given: ClassA a = new ClassA(); a.methodA(); What is the resu ...
- Linux服务器修改文件句柄数和用户最大进程数限制
1.临时修改的方法:ulimit -HSn 102400此方法当前会话有效 2.永久修改方法(修改单个进程打开的最大句柄数)修改vi /etc/security/limits.conf,在后面添加一下 ...
- windows下64位python的安装及机器学习相关包的安装(实用)
开通博客已久,想了好久决定写个基础的安装教程,望后人少走弯路,也借此希望跟大家多多交流.文中给出的链接默认是基于对python2.7的前提下的包. 1.首先下载64位Python包,进行安装(默认py ...
- gulp+webpack配置
转自:https://www.jianshu.com/p/2549c793bb27 gulp gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开 ...
- bzoj千题计划141:bzoj3532: [Sdoi2014]Lis
http://www.lydsy.com/JudgeOnline/problem.php?id=3532 如果没有字典序的限制,那么DP拆点最小割即可 加上字典序的限制: 按c从小到大枚举最小割边集中 ...
- [SDOI2016 Round1] 数字配对
COGS 2221. [SDOI2016 Round1] 数字配对 http://www.cogs.pro/cogs/problem/problem.php?pid=2221 ★★★ 输入文件:m ...
- codevs 1540 1540 银河英雄传说
1540 银河英雄传说 题目描述 Description 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银 ...
- nginx.conf 基础配置
### 全局块开始### #配置允许运行nginx服务器的用户和用户组 user nobody; #配置允许nginx进程生成的worker process 数 worker_processes 1; ...
- 【Linux 命令】iftop安装与简单使用
iftop是linux下的一个流量监控工具,用于查看实时网络流量,反向解析IP,显示端口信息官网:http://www.ex-parrot.com/~pdw/iftop/ 1.安装必须软件包 yum ...
- BOOST 之filesystem, path
目录[-] 使用 boost::filesystem 的第一个程序 清单 1. 用于确定某个文件的类型是否为 Directory 的代码 了解 Boost path 对象 清单 2. 创建 Boost ...