2018-09-08Cookie的发送和Cookie的读取+Session基本原理
Posted postgredingdangniu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-09-08Cookie的发送和Cookie的读取+Session基本原理相关的知识,希望对你有一定的参考价值。
Cookie会话技术:
不值得上传到服务器并且保存在数据库的数据保存在Cookie中!
从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话!
会话技术就是记录这次会话中客户端态的状与数据的!
会话技术分为Cookie和Session:
Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端 可以清除Cookie!
Session:将数据存储到服务器端,安全性相对好,增加服务器的压力!
Cookie技术可以分为两方面学习:
服务器端怎样将一个Cookie发送到客户端!
服务器端怎样接收客户端携带的Cookie!
Cookie中只可以写英文不可以写中文!
如果不设置持久化时间,Cookie会存储在浏览器的内存中,浏览器关闭 Cookie信息销毁(会话级别的Cookie),如果设置持久化时间,Cookie信息会 被持久化到浏览器的磁盘文件里!
如果不设置携带路径,那么该Cookie信息会在访问产生该Cookie的Web资源所在的路径(Web项目的服务器路径)都携带Cookie信息!
发送Cookie示例代码:
package com.oracle.demo01; 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 SendCookie extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建Cookie: Cookie Cookie=new Cookie("goods","phone"); //设置Cookie持久化存储时间,也就是Cookie在硬盘上保存的时间: Cookie.setMaxAge(3*60); //设置Cookie携带路径,只有访问/Web06/SendCookie的时候才会携带Cookie信息: //Cookie.setPath("/Web06/SendCookie"); //只要访问Web06下的资源都携带Cookie,默认是/Web06: //Cookie.setPath("/Web06"); //只要访问服务器下的所有资源都携带Cookie: //Cookie.setPath("/"); //发送Cookie至客户端: response.addCookie(Cookie); //第一次访问请求没有,第二次访问请求访问都有! //一次会话是根据浏览器开启与关闭来判定的! } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
服务器接收客户端携带的Cookie信息示例代码:
package com.oracle.demo01; 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 GetCookie extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获得客户端携带的Cookie的数据: Cookie[] Cookies=request.getCookies(); //遍历,通过Cookie名称获得想要的Cookie值: for(Cookie Coo:Cookies){ if(Coo.getName().equals("goods")){ String value=Coo.getValue(); System.out.println(value); } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
服务器移除客户端Cookie示例代码:
package com.oracle.demo01; 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 RemoveCookie extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建Cookie: Cookie Cookie=new Cookie("goods","phone"); //设置携带路径: Cookie.setPath("/Web06/SendCookie"); //设置持久化时间: Cookie.setMaxAge(0); //发送Cookie至客户端: response.addCookie(Cookie); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Seesion技术:
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间;所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID!
//Session技术是依托于Cookie来实现的!
强调:
当创建一个Session域时,TomCat内核会看看客户端有没有已有的存储Session的Cookie,如果有,则把服务器端已有的JSessionID给客户端,如果没有该存储Session的Cookie的话,TomCat内核会重新分配一个JSessionID给客户端!
//不同浏览器有不同的JSessionID!
获得Seesion域对象:
HttpSession Session = request.getSession();
Session也是存储数据的区域对象,所以session对象也具有如下三个方法:
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
面试题:
创建:第一次执行request.getSession()时创建!
销毁:
① 服务器非正常关闭时!
② Session过期/失效(默认30分钟),默认在服务器消失(Tips:如果想要延长Session在服务器的存留时间,请在自定义的Web.xml文件中定义Session的生命周期,可以复制TomCat的Session设置来重新定义)!
③ 调用Session.invalidate();方法手动销毁!
Session域的作用范围:默认在一次会话中,任何资源共用一个Session!
Cookie会话技术:
不值得上传到服务器并且保存在数据库的数据保存在Cookie中!
从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话!
会话技术就是记录这次会话中客户端态的状与数据的!
会话技术分为Cookie和Session:
Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端 可以清除Cookie!
Session:将数据存储到服务器端,安全性相对好,增加服务器的压力!
Cookie技术可以分为两方面学习:
服务器端怎样将一个Cookie发送到客户端!
服务器端怎样接收客户端携带的Cookie!
Cookie中只可以写英文不可以写中文!
如果不设置持久化时间,Cookie会存储在浏览器的内存中,浏览器关闭 Cookie信息销毁(会话级别的Cookie),如果设置持久化时间,Cookie信息会 被持久化到浏览器的磁盘文件里!
如果不设置携带路径,那么该Cookie信息会在访问产生该Cookie的Web资源所在的路径(Web项目的服务器路径)都携带Cookie信息!
发送Cookie示例代码:
package com.oracle.demo01;
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 SendCookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie:
Cookie Cookie=new Cookie("goods","phone");
//设置Cookie持久化存储时间,也就是Cookie在硬盘上保存的时间:
Cookie.setMaxAge(3*60);
//设置Cookie携带路径,只有访问/Web06/SendCookie的时候才会携带Cookie信息:
//Cookie.setPath("/Web06/SendCookie");
//只要访问Web06下的资源都携带Cookie,默认是/Web06:
//Cookie.setPath("/Web06");
//只要访问服务器下的所有资源都携带Cookie:
//Cookie.setPath("/");
//发送Cookie至客户端:
response.addCookie(Cookie);
//第一次访问请求没有,第二次访问请求访问都有!
//一次会话是根据浏览器开启与关闭来判定的!
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
服务器接收客户端携带的Cookie信息示例代码:
package com.oracle.demo01;
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 GetCookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获得客户端携带的Cookie的数据:
Cookie[] Cookies=request.getCookies();
//遍历,通过Cookie名称获得想要的Cookie值:
for(Cookie Coo:Cookies){
if(Coo.getName().equals("goods")){
String value=Coo.getValue();
System.out.println(value);
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
服务器移除客户端Cookie示例代码:
package com.oracle.demo01;
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 RemoveCookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie:
Cookie Cookie=new Cookie("goods","phone");
//设置携带路径:
Cookie.setPath("/Web06/SendCookie");
//设置持久化时间:
Cookie.setMaxAge(0);
//发送Cookie至客户端:
response.addCookie(Cookie);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Seesion技术:
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间;所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID!
//Session技术是依托于Cookie来实现的!
强调:
当创建一个Session域时,TomCat内核会看看客户端有没有已有的存储Session的Cookie,如果有,则把服务器端已有的JSessionID给客户端,如果没有该存储Session的Cookie的话,TomCat内核会重新分配一个JSessionID给客户端!
//不同浏览器有不同的JSessionID!
获得Seesion域对象:
HttpSession Session = request.getSession();
Session也是存储数据的区域对象,所以session对象也具有如下三个方法:
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
面试题:
创建:第一次执行request.getSession()时创建!
销毁:
① 服务器非正常关闭时!
② Session过期/失效(默认30分钟),默认在服务器消失(Tips:如果想要延长Session在服务器的存留时间,请在自定义的Web.xml文件中定义Session的生命周期,可以复制TomCat的Session设置来重新定义)!
③ 调用Session.invalidate();方法手动销毁!
Session域的作用范围:默认在一次会话中,任何资源共用一个Session!
以上是关于2018-09-08Cookie的发送和Cookie的读取+Session基本原理的主要内容,如果未能解决你的问题,请参考以下文章