JavaWeb后端入门8—会话技术

JavaWeb后端入门8—会话技术

1. 概述

1.1 什么是会话会话简单理解为:用户打开一个浏览器,点击多个超链接访问服务器的 web资源,然后关闭浏览器,整个过程称为是一次会话。

1.2 为什么要使用每个用户与服务器进行交互过程中,产生一些各自的数据,程序想要把这些数据进行保存,就需要使用会话技术。

例如:用户点击超链接购买一个商品,程序应该保存用户所购买的商品,以便于用户点击结账可以得到用户所购买的商品信息。

思考:用广购买的商品保存在request 或 Servletcontext中是否可以?

不可以 ①如果保存在request,响应结束之后,对象销毁,数据丢失②如果存储在ServletContext,因为只有一个,所有用户的购物车就会共享

2. 分类及实现原理2.1 会话技术的分类cookiesessioncookie

cookie是客户端技术,程序吧每个用户的数据以cookie的形式保存到各自浏览器中。当用户使用浏览器再次访问服务器中的web资源的时候,就会带这个字的数据过去。这样,web资源处理的就是用户各自的数据了。

session

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

2.2 会话技术的实现原理cookie

session

3. Cookie的API构造方法:

代码语言:javascript复制Cookie(String name,String value)获得Cookie名称、值:

代码语言:javascript复制String string = getName()

String string = getValue()设置Cookie有效域名

代码语言:javascript复制setDomain(String)设置Cookie的有效路径

代码语言:javascript复制setPath(String)设置Cookie 的有效时长:Cookie生命周期

代码语言:javascript复制setMaxAge(int)4. 利用cookie记录上次访问的时间4.1 基本需求及流程4.2 代码实现cookie的简单实用代码语言:javascript复制getCookies()获得从浏览器带来的cookie

addCookie()通过HttpServletresponse想浏览器回写cookie1、抽取查找指定名称Cookie的工具类代码语言:javascript复制package com.itheima.utils;

import javax.servlet.http.Cookie;

/**

* 查找指定名称Cookie的工具类

* */

public class CookieUtils {

public static Cookie findCookie(Cookie[] cookies,String name) {

if (cookies == null) {

//浏览器没有携带任何cookie

return null;

}else {

for(Cookie cookie:cookies) {

//判断数组中的每个cookie名称是否与给定名称一致

if (name.equals(cookie.getName())) {

//直接返回

return cookie;

}

}

return null;

}

}

}2.实现代码代码语言:javascript复制package com.itheima.cookie;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

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 com.itheima.utils.CookieUtils;

/**

* 记录用户上次访问时间的Servlet

*/

public class VisitServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/**

* 用户访问Servlet

* 如果是第一次访问:显示您好+记录当前访问时间,存入到cookie,回写到浏览器

* 如果不是第一次访问:从cookie中获得上次时间,显示到页面+记录当前时间,存入到cookie,回写到浏览器

* */

// 设置响应的消息体的数据格式以及编码(为了支持中文)

response.setContentType("text/html;charset=utf-8");

//判断是否为第一次访问:从置顶的cookie数组中获取指定名称的cookie

//获得从浏览器带过来的所有cookie

Cookie[] cookies = request.getCookies();

Cookie cookie = CookieUtils.findCookie(cookies, "lastVisit");

//判断是否是第一次访问

if (cookie == null) {

//是第一次

//显示到页面上一段内容

response.setContentType("text/html;charset=UTF-8");

response.getWriter().println("

你好,欢迎来到本网站!

");

}else {

//不是第一次

//获得cookie中上一次访问时间,显示到页面

String value = cookie.getValue();

//显示到页面上一段内容

response.setContentType("text/html;charset=UTF-8");

response.getWriter().println("

你好,上次访问时间为:"+value+"

");

}

//记录当前系统时间,存入到Cookie,回写到浏览器

Date d = new Date();

SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日hh:mm:ss");

String currentTime = format.format(d);

//存入到cookie中

Cookie c = new Cookie("lastVisit",currentTime);

//回写到浏览器

response.addCookie(c);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}注意1:response.setContentType("text/html;charset=utf-8");必不可少!!

注意2:最新版的Cookie中一定不能携带空格!!

4.3 代码存在的问题关闭浏览器再打开的时候,cookie并不会保存,还是第一次访问时的情形。

这是Cookie的分类不同:

默认级别的Cookie没有设置有效时间的Cookie,默认情况下,只要关闭浏览器,Cookie就被销毁。(存在于浏览器的内存中)

持久级别的Cookie 指的是有有效时间的Cookie,这种Cookie的内容不保存在浏览器内存中,将Cookie的内容保存到(持久化)到硬盘上。即使关闭浏览器,再次打开时也会加载硬盘上的文件,从而Cookie的数据就不会丢失。

4.4 代码改进代码语言:javascript复制回写到浏览器之前,加入两句代码

//给Cookie设置有效路径

c.setPath("/web03");

//给Cookie设置有效时长(单位秒)

c.setMaxAge(60*60);//1小时4.5 Cookie使用细节一个Cookie至少含有一个名称和值一个web站点可以给一个浏览器发送多个Cookie。一个Web浏览器也可以存放多个站点的Cookie浏览器一般只允许存放300个Cookie,每个站点最多可以存放20个Cookie,每个Cookie的大小限制为4k(老版本)。 新版本浏览器无此限制如果创建了一个Cookie,并发送到浏览器,默认情况下它是一个会话级别的,用户关闭浏览器就被删除。如果希望存储在硬盘上,需要设置SetMaxAge( ),这个值以秒为单位如果需要删除持久性的Cookie,可以将Cookie的有效时长设置为0,。注意:删除Cookie是,path必须一致,否则无法删除。5. Session概述5.1 什么是SessionSession称为是一次会话,cookie将用户产生的私有的数据保存到浏览器端,Session将用户产生的私有的数据保存到服务器端。注意:一个浏览器独占一个session对象。因此,在需要保存用户数据时候,服务器程序可以将用户数据写到session对象中,当用户使用浏览器访问其他程序时,其他程序可以从用户的session中取出该用户的数据,为用户服务。

5.2 为什么需要SessionCookie的局限性Cookie保存的数据有个数和大小限制数据是保存在客户端浏览器上(相对不是很安全)Session的优点Session无个数和大小限制数据保存在服务器上5.3 保存数据过程5.4 Session实现原理-基于Cookie6. Session作为域对象存取数据6.1 作为域对象的API向Session中存入数据代码语言:javascript复制setAttribute()从Session域中获取数据代码语言:javascript复制getAttribute()从Session域中移除数据代码语言:javascript复制removeAttribute()6.2 作为域对象的作用范围作用范围是一次会话的范围。

即用户打开浏览器,打开若干个超链接,访问服务器资源,最后关闭浏览器的过程。

7. 登录案例7.1 案例需求及功能分析登录页面有:用户名、 密码、验证码、记住用户名、登录按钮

登陆失败用户名或密码错误验证码错误回到登录页面登陆成功如果勾选了记住用户名,则利用Cookie记住登陆成功用户的用户名需要将用户信息保存到Session中进行页面跳转到成功页面

相关阅读

老液晶电视主板改用万能主板实例
365bet日博

老液晶电视主板改用万能主板实例

⌚ 07-22 👁️ 8030
羊驼便宜的一只多少元
365bet足球赌博

羊驼便宜的一只多少元

⌚ 08-06 👁️ 7556
华为手机dlna怎么开启 华为手机DLNA功能如何设置和使用