unit10-Cookie、Session
什么是会话
什么是会话:当浏览器发请求访问服务器开始,一直到访问服务器结束,浏览器关闭为止,这期间浏览器和服务器之间产生的所有请求和响应加在一起,就称之为浏览器和服务器之间的一次会话。
在一次会话中往往会产生一些数据,而这些数据往往是需要我们保存起来的,如何保存会话中产生的这些数据呢?
比如在购物过程中,将商品加入购物车,其实就是将商品信息保存到数据库中。(不讨论)
如果在没有登录时,将商品加入购物车,其实就是将商品信息保存到了cookie或session中。
可以使用cookie或者session保存会话中产生的数据。
如何将会话中产生的数据保存到cookie或者是session中?
cookie原理及应用
cookie的工作原理
Cookie是将会话中产生的数据保存在客户端,是客户端技术。
Cookie是基于两个头进行工作的:分别是Set-Cookie响应头和Cookie请求头
通过Set-Cookie响应头将cookie从服务器端发送给浏览器,让浏览器保存到内部;而浏览器一旦保存了cookie,以后浏览器每次访问服务器时,都会通过cookie请求头,将cookie信息再带回服务器中。在需要时,在服务器端可以获取请求中的cookie中的数据,从而实现某些功能。
cookie的API及应用
1、创建Cookie对象
Cookie c = new Cookie(String name, String value);
// 创建cookie的同时需要指定cookie的名字和cookie要保存的值
2、将Cookie添加到response响应中
response.addCookie( Cookie c );
// 将cookie添加到响应中,由服务器负责将cookie信息发送给浏览器,再由浏览器保存到内部(可以多次调用该方法,添加一个以上的cookie)
3、获取请求中的所有cookie对象组成的数组
Cookie[] cs = request.getCookies();
// 获取请求中携带的所有cookie组成的cookie对象数组,如果请求中没有携带任何cookie,调用该方法会返回null。
4、删除浏览器中的Cookie
// cookie的API中没有提供直接删除cookie的方法,可以通过别的方式间接删除cookie
// 删除名称为cart的cookie:可以向浏览器再发送一个同名的cookie(即名称也叫做cart),并设置cookie的最大生存时间为零,由于浏览器是根据cookie的名字来区分cookie,如果前后两次向浏览器发送同名的cookie,后发送的cookie会覆盖之前发送的cookie。而后发送的cookie设置了生存时间为零,因此浏览器收到后也会立即删除!
代码示例:
//创建一个名称为cart的cookie
Cookie c = new Cookie("cart", "");
//设置cookie的最大生存时间为零
c.setMaxAge( 0 );
//将cookie添加到响应中,发送给浏览器
response.addCookie( c );
out.write( "成功删除了名称为cart的cookie..." );
5、Cookie的常用方法
cookie.getName(); // 获取cookie的名字
cookie.getValue(); // 获取cookie中保存的值
cookie.setValue(); // 设置/修改cookie中保存的值(没有setName方法,因为cookie的名字无法修改)
cookie.setMaxAge(); //设置cookie的最大生存时间
6、setMaxAge方法:设置cookie的最大生存时间
如果不设置该方法,cookie默认是会话级别的cookie,即生存时间是一次会话。当浏览器关闭,会话结束时,cookie也会被销毁(cookie默认存在浏览器的内存中,当浏览器关闭,内存释放,cookie也会随着内存的释放而销毁。)
如果设置了该方法,cookie将不会保存到浏览器的内存中,而是以文件形式保存到浏览器的临时文件夹中(也就是硬盘上),这样再关闭浏览器,内存释放,保存到硬盘上的cookie文件不会销毁,再次打开浏览器,还可以获取硬盘上的cookie信息。
代码示例:
//创建一个Cookie对象,将商品信息保存到cookie中
Cookie cookie = new Cookie( "cart", prod );
//设置cookie的最大生存时间, 单位:秒
cookie.setMaxAge( 60*60*24 );
//将cookie对象添加到response响应中
response.addCookie( cookie );
案例:使用cookie模拟购物车
1.index.html
...
<body>
<h3>点击下面的商品链接, 可以将商品加入购物车</h3>
<!--
http://localhost/day13-cookie/CartServlet
http://localhost/day13-cookie/index.html
-->
<p><a href="CartServlet?prod=iphone11">iphone11</a></p>
<p><a href="CartServlet?prod=vivonex3">vivonex3</a></p>
<p><a href="CartServlet?prod=xiaomishouji">xiaomishouji</a></p>
<p><a href="CartServlet?prod=huaweip30">huaweip30</a></p>
<p><a href="CartServlet?prod=海尔洗衣机">海尔洗衣机</a></p>
<h3>点击下面的支付链接, 可以对购物车中的商品进行结算</h3>
<a href="PayServlet">支付</a>
</body>
...
2.CartServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//-------------------------------------------------------
//获取请求中携带的商品信息(将要加入购物车的商品信息)
String prod = request.getParameter( "prod" );
//创建一个Cookie对象,将商品信息保存到cookie中
Cookie cookie = new Cookie( "cart", prod );
//设置cookie的最大生存时间, 单位:秒
cookie.setMaxAge( 60*60*24 );
//将cookie对象添加到response响应中
response.addCookie( cookie );
//做出回应
out.write( "成功将"+prod+"加入了购物车....." );
}
3.PayServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//------------------------------------------------------
//获取请求中的所有cookie信息(null/cookie数组)
Cookie[] cs = request.getCookies();
//遍历所有cookie数组, 找出名称为cart的cookie
String prod = null;
if( cs != null ) {
for (Cookie c : cs) {
if( "cart".equals( c.getName() ) ) {
//获取cookie中保存的商品信息
prod = c.getValue();
}
}
}
//为商品进行结算
if( prod == null ) {
out.write( "您还没有将商品加入购物车...." );
}else {
out.write( "成功为"+prod+"支付了1000.00元...." );
}
}
session原理及应用
session的工作原理
Session是将会话中产生的数据保存在服务器端,是服务器端技术
Session是一个域对象,session中也保存了一个map集合,往session中存数据,其实就是将数据保存到session的map集合中。
通过session.setAttribute()方法可以将数据保存到session中,通过session.getAttribute()方法可以将数据从session中取出来。
session是一个域对象
获取session对象:
request.getSession()
// 获取一个session对象;如果在服务器内部有当前浏览器对应的session,则直接返回该session对象;如果没有对应session,则会创建一个新的session对象再返回;
Session是一个域对象,因此session中也提供了存取数据的方法。
session.setAttribute(String attrName, Object attrValue);
// 往session域中添加一个域属性,属性名只能是字符串类型,属性值可以是任意类型。
session.getAttribute(String attrName);
// 根据属性名获取域中的属性值,返回值是一个Object类型
Session域对象的三大特征:
(1)生命周期:
创建session:第一次调用request.getSession()方法时,会创建一个session对象。(当浏览器在服务器端没有对应的session时,调用request.getSession()方法服务器会创建一个session对象。)
销毁session:
超时销毁:默认情况下,当超过30分钟没有访问session,session就会超时销毁。(30分钟是默认时间,可以修改,但不推荐修改)
自杀:调用session的invalidate方法时,会立即销毁session。
意外身亡:当服务器非正常关闭时(硬件损坏,断电,内存溢出等导致服务器非正常关闭),session会随着服务器的关闭而销毁;
当服务器正常关闭,在关闭之前,服务器会将内部的session对象序列化保存到服务器的work目录下,变为一个文件。这个过程叫做session的钝化(序列化);再次将服务器启动起来,钝化着的session会再次回到服务器,变为服务器中的对象,这个过程叫做session的活化(反序列化)。
(2)作用范围:在一次会话范围内(获取到的都是同一个session对象)
(3)主要功能:在整个会话范围内实现数据的共享
案例:使用session模拟购物车
1、index.html
<body>
<h3>点击下面的商品链接, 可以将商品加入购物车</h3>
<!--
http://localhost/day13-cookie/CartServlet
http://localhost/day13-cookie/index.html
-->
<p><a href="CartServlet?prod=iphone11">iphone11</a></p>
<p><a href="CartServlet?prod=vivonex3">vivonex3</a></p>
<p><a href="CartServlet?prod=xiaomishouji">xiaomishouji</a></p>
<p><a href="CartServlet?prod=huaweip30">huaweip30</a></p>
<p><a href="CartServlet?prod=海尔洗衣机">海尔洗衣机</a></p>
<h3>点击下面的支付链接, 可以对购物车中的商品进行结算</h3>
<a href="PayServlet">支付</a>
</body>
2、CartServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//------------------------------------------------------
//获取将要添加到购物车的商品信息
String prod = request.getParameter( "prod" );
//获取一个session对象,将商品信息保存到session中
HttpSession session = request.getSession();
//设置session的超时时间为30秒
//session.setMaxInactiveInterval( 30 );
session.setAttribute( "cart" , prod );
//做出响应
out.write( "成功将 [ "+prod+" ] 加入了购物车~~~" );
}
3、PayServlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//获取一个session对象(之前的session)
HttpSession session = request.getSession();
//从session中获取到要结算的商品信息
String prod = (String)session.getAttribute( "cart" );
//对商品进行结算,做出回应
out.write( "成功为 [ "+prod+" ] 支付了2000.00元~~~~" );
}
总结:两者的区别
Cookie和session都属于会话技术,都可以保存会话中产生的数据,但由于cookie和session的工作原理和特点不同,因此两者的应用场景也不一样。
Cookie的特点:
cookie是将会话中产生的数据保存在浏览器客户端, 是客户端技术(JS可以访问cookie)
cookie是将数据保存在客户端浏览器,容易随着用户的操作导致cookie丢失或者被窃取,因此cookie中保存的数据不太稳定,也不太安全。
但cookie将数据保存在客户端,对服务器端没有太多影响,可以将数据保存很长时间。
总结:因此cookie中适合存储需要长时间保存、但对安全性要求不高的数据。
浏览器对cookie的大小和个数都有限制,一般推荐每一个站点给浏览器发送的cookie数量不超过20个,每一个cookie的大小不超过1kb。
Cookie的应用:实现购物车、记住用户名、30天内自动登录等。
Session的特点
session是将会话中产生的数据保存在服务器端,是服务器端技术
session将数据存在服务器端的session对象中,相对更加的安全,而且更加稳定。不容易随着用户的操作而导致session中的数据丢失或者是被窃取。
但session是服务器端的对象,在并发量较高时每一个浏览器客户端在服务器端都要对应一个session对象,占用服务器的内存空间,影响效率。
总结:因此session中适合存储对安全性要求较高,但不需要长时间保存的数据。
Session的应用:保存登录状态、保存验证码
扩展内容
cookie中保存中文数据的问题
以下问题是针对Tomcat8.0及8.0以下的版本,在Tomcat8.5及8.5以后的版本中已经解决了该问题!
HTTP协议中规定了请求信息和响应信息中不能包含中文数据!
因此通过浏览器向服务器发送中文数据时,浏览器会将中文数据进行URL编码,编码为下面这种格式:
http://localhost/day13-cookie/index.html?user=%E5%BC%A0%E9%A3%9E%E9%A3%9E
将中文数据转成下面这种格式,叫做URL编码:
张飞飞 ---> URL编码 ---> %E5%BC%A0%E9%A3%9E%E9%A3%9E
将下面这种格式再次转回中文数据,叫做URL解码:
%E5%BC%A0%E9%A3%9E%E9%A3%9E ---> URL解码---> 张飞飞
问题:当cookie中保存中文数据,将cookie添加到响应中时,会报一个500异常,如下:
解决方法是:
将存入cookie中的先进行URL编码,再存入Cookie中,例如:
从cookie取出来的数据是进行URL编码后的数据,在使用之前需要进行URL解码,例如:
获取不到之前的session的问题
将商品保存到session中后,关闭浏览器再打开浏览器,访问服务器,此时获取不到之前的session。因为session是基于Cookie工作的。
在服务器创建一个session后,会为session分配一个独一无二的编号,称之为session的id,在此次响应时,服务器会将session的id以一个名称为JSESSIONID的cookie发送给浏览器保存到浏览器内部。
由于保存sessionid的cookie默认是会话级别的cookie,在浏览器关闭后,cookie会跟着销毁,sessionid也丢失了。因此下次访问服务器,没有session的id就获取不到之前的session。也获取不到session中的商品信息
解决方法:我们可以创建一个名称为JSESSIONID的cookie,其中保存session的ID,并设置cookie的最大存活时间,让cookie保存到硬盘上(即使浏览器关闭,cookie也不会销毁),这样下次访问服务器时,还可以将sessionid带给服务器,服务器可以通过sessionid获取到之前的session。 从session中获取到商品信息
04-02作业:
1、描述Cookie保存数据的原理
2、描述session保存数据的原理
3、练习课上案例:使用cookie技术实现购物功能
4、练习课上案例:使用session技术实现购物功能
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tedu</groupId>
<artifactId>day16-cookie</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
</project>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
http://localhost:8080/day16-cookie/CartServlet
http://localhost:8080/day16-cookie/index.html
-->
<h3>点击下面的商品链接,将商品加入购物车.....</h3>
<p><a href="CartServlet?prod=huaweip40">huaweip40</a></p>
<p><a href="CartServlet?prod=xiaomi10">xiaomi10</a></p>
<p><a href="CartServlet?prod=vivos7">vivos7</a></p>
<p><a href="CartServlet?prod=iphone11">iphone11</a></p>
<h3>点击下面的支付链接,对购物车商品进行支付.....</h3>
<p><a href="PayServlet">支付</a></p>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>day16-cookie</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>CartServlet</display-name>
<servlet-name>CartServlet</servlet-name>
<servlet-class>com.tedu.CartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CartServlet</servlet-name>
<url-pattern>/CartServlet</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>PayServlet</display-name>
<servlet-name>PayServlet</servlet-name>
<servlet-class>com.tedu.PayServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PayServlet</servlet-name>
<url-pattern>/PayServlet</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>DeleteCookie</display-name>
<servlet-name>DeleteCookie</servlet-name>
<servlet-class>com.tedu.DeleteCookie</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DeleteCookie</servlet-name>
<url-pattern>/DeleteCookie</url-pattern>
</servlet-mapping>
</web-app>
package com.tedu;
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;
/**
* 负责将商品加入购物车
* @author huawei
*
*/
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//响应内容给浏览器(暂时不要输出中文数据)alt+shift+L
//处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
//获取输出流,向浏览器响应数据
PrintWriter out = response.getWriter();
//--------------------------
//1.获取请求中的参数(要添加到购物车的商品信息)
String prod=request.getParameter("prod");
//2.创建一个cookie对象,将商品信息保存到cookie中
Cookie cookie=new Cookie("cart",prod);
//为cookie设置最大存活时间(秒/单位)
cookie.setMaxAge(60*60*24*365);//1年
//3.将cookie添加到响应中,发送给浏览器保存
response.addCookie(cookie);
out.write("成功将["+prod+"]加入购物车....");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.tedu;
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;
public class DeleteCookie extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//响应内容给浏览器(暂时不要输出中文数据)alt+shift+L
//处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
//获取输出流,向浏览器响应数据
PrintWriter out = response.getWriter();
//-----------------------------------
/**
* Cookie的API中没有提供直接删除cookie的方法
* 可以通过setMaxAge(0)间接删除cookie
* 例如:删除名称为cart的cookie
* 思路:向浏览器再发送一个同名的(名称为cart的)cookie,并且设置
* 该cookie的setMaxAge为零,将cookie发送给浏览器,就可以
* 删除名称为cart的cookie
*
* 原理:由于浏览器是根据cookie的名字来区分一个cookie的,如果
* 先后两次给浏览器发送同一个名称的cookie,后面发送的cookie则
* 会覆盖前面发送的cookie.而后发送的cookie设置了生存时间为0,
* 浏览器收到后,也会立即删除
*/
Cookie c=new Cookie("cart","");
c.setMaxAge(0);
response.addCookie(c);
out.write("成功删除了名称为cart的cookie!!!!!!");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.tedu;
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;
/**
* 对购物车中的商品进行结算
* @author huawei
*
*/
public class PayServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//响应内容给浏览器(暂时不要输出中文数据)alt+shift+L
//处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
//获取输出流,向浏览器响应数据
PrintWriter out = response.getWriter();
//-----------------------------
//1.获取请求中的所有cookie组成的数组
Cookie[] cs = request.getCookies();//array? null?
//2.遍历cookie数组
String prod=null;
if(cs !=null) {
for (Cookie cookie : cs) {
//3.找到名称为cart的cookie(判断cookie的名字是否为cart)
if(cookie.getName().equals("cart")) {
//4.将名称为cart的cookie中保存的商品取出来
prod=cookie.getValue();
}
}
}
//5.模拟支付,并给出响应
if(prod==null) {
out.write("您还没有将商品加入购物车.....");
}else {
out.write("成功为["+prod+"]支付了1000元.....");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tedu</groupId>
<artifactId>day16-session</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
</project>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
http://localhost:8080/day16-cookie/CartServlet
http://localhost:8080/day16-cookie/index.html
-->
<h3>点击下面的商品链接,将商品加入购物车.....</h3>
<p><a href="CartServlet?prod=huaweip40">huaweip40</a></p>
<p><a href="CartServlet?prod=xiaomi10">xiaomi10</a></p>
<p><a href="CartServlet?prod=vivos7">vivos7</a></p>
<p><a href="CartServlet?prod=iphone11">iphone11</a></p>
<h3>点击下面的支付链接,对购物车商品进行支付.....</h3>
<p><a href="PayServlet">支付</a></p>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>day16-session</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>CartServlet</display-name>
<servlet-name>CartServlet</servlet-name>
<servlet-class>com.tedu.CartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CartServlet</servlet-name>
<url-pattern>/CartServlet</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>PayServlet</display-name>
<servlet-name>PayServlet</servlet-name>
<servlet-class>com.tedu.PayServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PayServlet</servlet-name>
<url-pattern>/PayServlet</url-pattern>
</servlet-mapping>
</web-app>
package com.tedu;
import java.io.IOException;
import java.io.PrintWriter;
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 huawei
*
*/
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//响应内容给浏览器(暂时不要输出中文数据)alt+shift+L
//处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
//获取输出流,向浏览器响应数据
PrintWriter out = response.getWriter();
//----------------------------
//1.获取请求中的参数(要添加到购物车的商品信息)
String prod=request.getParameter("prod");
/**
* 2.获取一个session对象,将商品添加到session中
* 如果服务器内部有当前浏览器对应的session,就会直接返回该session;
* 如果服务器内部没有对应的session,就会创建一个session再返回
*/
HttpSession session = request.getSession();
session.setAttribute("cart", prod);
//3.做出响应
out.write("成功将["+prod+"]加入了购物车~~~~~~");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.tedu;
import java.io.IOException;
import java.io.PrintWriter;
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 huawei
*
*/
public class PayServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//响应内容给浏览器(暂时不要输出中文数据)alt+shift+L
//处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
//获取输出流,向浏览器响应数据
PrintWriter out = response.getWriter();
//--------------------------------------
/**
* 1.获取之前的session
* request.getSession(false)
* 如果服务器内部有当前浏览器对应的seeeion,就返回该session对象
* 如果服务器内部没有当前浏览器对应的session,就返回null值
*/
HttpSession session = request.getSession(false);//session对象?null
//2.从session中取出添加的商品信息
if(session==null) {
out.write("您还没有将商品加入购物车~~~~~");
}else {
//3.模拟支付并作出回应
String prod = (String)session.getAttribute("cart");
out.write("成功为["+prod+"]支付了2000元~~~~~");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
unit10-Cookie、Session相关推荐
- 还分不清 Cookie、Session、Token、JWT?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:掘金 作者:秋天不落叶 juejin.im/po ...
- python自动化接口测试中的cookies怎么实现_Python接口自动化之cookie、session应用
------·今天距2021年260天·------ 这是ITester软件测试小栈第112次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之post请 ...
- Cookie、Session、Token那点事儿
前言:新公司项目中使用到了Cookie,在各大Android技术讨论群向前辈们取经讨论这cookie.session.token这仨哥们的时候,很多开发者说法不一各抒已见,所以是时候回顾下http基础 ...
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...
- chrome session丢失_一文带你彻底读懂Cookie、Session、Token到底是什么
在了解这三个概念之前我们先要了解HTTP是无状态的Web服务器,什么是无状态呢?就像上面夏洛特烦恼中经典的一幕对话一样,一次对话完成后下一次对话完全不知道上一次对话发生了什么.如果在Web服务器中只是 ...
- 面试官:要不讲讲 Cookie、Session、Token、JWT之间的区别?
击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入组织 来源:22j.co/btPm 什么是认证(Authentication ...
- 购物车的实现(cookie、session)
购物车相当于现实中超市的购物车,不同的是一个是实体车,一个是虚拟车而已.用户可以在购物网站的不同页面之间跳转,以选购自己喜爱的商品,点击购买时,该商品就自动保存到你的购物车中,重复选购后,最后将选中的 ...
- vue从url中获取token并加入到 请求头里_BATJ都会用到的接口鉴权cookie、session 和token...
鉴权 鉴权是指验证用户是否拥有访问系统的权利-鉴定权限. cookie.session和token 为什么会有cookie.session和token? 1. http是无状态协议 什么是无状态呢? ...
- cookie、session、sessionid 与jsessionid
转载自 cookie.session.sessionid 与jsessionid cookie.session.sessionid 与jsessionid,要想明白他们之间的关系,下面来看个有趣的场 ...
- php session 机制,Cookie、Session机制详解及PHP中Session处理
会话机制 Cookie/Session: 在web应用中,常用的会话追踪机制是Cookie和Session.而Cookie是通过在浏览器里记录确定用户身份,Session在服务器端记录信息确定用户身份 ...
最新文章
- flutter 刷脸_GitHub - nnnggel/baidu_face_plugin: 百度人脸识别和活体检测 Flutter 插件(目前版本仅支持 Android)...
- 游戏行业中的职位:你可以做什么
- 异常信息: java.lang.ClassNotFoundException: org.aspec
- python最基本的规则是关键字吗,Python 关键字
- php redis mset,MSET命令_视频讲解_用法示例-redis编程词典-php中文网
- springboot使用mongodb
- 全网最细Docker安装Minio,填满最新版大坑(强烈推荐收藏)
- arcgis10.1连接sqlserver数据库常见问题(转载)
- 云计算入门科普系列:基于Docker部署LNMP架构
- 热敏电阻如何查表计算温度_额温枪温补算法:热电堆温度补偿算法 MTP10B7F55
- 读书记录(持续更新...)
- Quartz 配置详解
- 计算机本地配置文件丢失,电脑C盘文件丢失的常见原因及恢复方法
- 微信小程序中如何使用阿里云iconfont图标
- 史上最全Java学习资料,共14W字,耗时半年整理
- Springboot项目调用阿里云语音服务案例【真实有用】
- ArcGis 地理配准注意事项
- blos硬盘启动台式计算机,戴尔台式机bios设置硬盘启动教程
- win7下桌面IE快捷方式无法删除解决方法
- python函数快查快用
热门文章
- Dva引用echarts制作统计图表
- §6.5 分离性公理与子空间,(有限)积空间和商空间
- 【问题解决】QT报错 undefined reference to `__imp__ZN11QSerialPortD1Ev‘
- OpwnWrt 路由器MWAN3多线多拨实现方法
- Java通用数据访问层 Uncode-DAL
- 字节跳动实习生转正工资_日常实习 | 字节跳动西瓜视频招募运营实习生啦!
- 【字节跳动实习】后端日常实习的三次面试+hr面 面经
- 阿里云国际版账号登录不上去,账号被风控怎么办?
- 咖世家咖啡与瑞士莲首度跨界合作,打造联名快闪店
- 【合天网安】利用sqlmap辅助手工注入