javaweb03-会话技术(HTTP协议,cookie和session))

1、HTTP协议

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。**设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。**1960年美国人[Ted Nelson](https://baike.baidu.com/item/Ted Nelson)构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

1.2、作用和特点

作用
HTTP是一个客户端服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。 事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。HTTP使用TCP而不是UDP的原因在于(打开)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。
通过HTTP或者HTTPS协议请求的资源由统一资源标示符url(Uniform Resource Identifiers)(或者,更准确一些,URLs)来标识。

特点

  1. 基于请求/响应模型的协议。(请求和响应必须成对出现,现有请求后有响应
  2. http 协议默认端口为80
  3. 简单快速:客户向服务器请求服务时,只需要传送请求方法和路劲。常用的请求方法为GET,HEAD,POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  4. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记
  5. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  6. 无状态:HTTP协议是无状态协议。 无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。所以我们要学会话技术(cookie和Session)
    每一次的请求之间都是相互独立,互不干扰的。每一次请求都是一个独立的事务

1.3、HTTP的功能

1.3.1、简介

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。

1.3.2、基本原理

一次HTTP操作称为一个事务,其工作过程可分为四步:

  1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
  2. 建立连接后,客户机发送一个请求给服务器,请求方法的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符,客户机信息和可能的内容
  3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号,一个成功或者错误的代码,后边是MIME信息包括服务器信息,和身体1信息和可能的内容。
  4. 客户端接收服务器返回的信息通过浏览器显示在用户的显示屏上,然好客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了
短连接、 无状态(无记忆)

1.3.3、URL解析

我们在浏览器的地址栏里输入的网站地址叫做URL (Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址。浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。

URL,全称是UniformResourceLocator, 中文叫统一资源定位器,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:

http://www.aspxfans.com:8080/news/index.jsp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:

1.协议部分: 该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

3.端口部分: 跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口

4.虚拟目录部分: 从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5.文件名部分(资源路径): 从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6.锚部分: 从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7.参数部分: 从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符

1.4、http协议版本

HTTP/0.9 HTTP协议的最初版本,功能简陋,仅支持请求方式GET,并且仅能请求访问HTML格式的资源。

HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开

HTTP/1.1,发送请求,创建一次连接,获得多个web资源,连接断开

1.5、HTTP协议的组成

Http协议由Http请求Http响应组成,当在浏览器中输入网址访问某个网站时, 你的浏览器会将你的请求封装成一个Http请求(HttpServletRequest)发送给服务器站点,服务器接收到请求后会组织响应数据封装成一个Http响应(HttpServletResPonse)返回给浏览器。即没有请求就没有响应

http请求包括:请求行、请求头、请求体

http响应包括:响应行、响应头、响应体

1.6、HTTP请求报文

HTTP请求报文由3部分组成(请求行+请求头+请求体): 只有post才有请求体

在这里插入图片描述

请求行:

例如:POST /chapter17/user.html HTTP/1.1

格式:请求方式 资源路径 协议/版本

请求行必须在http请求格式的第一行。

get请求:

将请求参数追加在url后面,不安全

url长度限制get请求方式数据的大小

没有请求体

一般的HTTP请求大多都是GET。

常见get请求:地址栏直接访问、< a href="">、< img src="">等

post请求:

请求参数在请求体处,较安全。

请求数据大小没有限制

只有表单设置为 method=“post” 才 是post请求,其他都是get请求
HEAD请求
head和get相似,不过服务端接收到head请求时只返回响应头,不发送响应内容。
所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。
DELETE请求:

删除某一个资源。
OPTIONS请求:

用于获取当前URL所支持的方法。若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
PUT请求:

把一个资源存放在指定的位置上。

本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
TRACE请求:

回显服务器收到的请求,主要用于测试或诊断。
CONNECT请求:

CONNECT方法是HTTP/1.1协议预留的,能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。

请求头:

**例如:**Host: 39.108.107.149:8080

POST http://39.108.107.149:8080/vk/app/rest/ddp/iModelServiceImpl/findModelByType HTTP/1.1
User-Agent: Fiddler
Host: 39.108.107.149:8080
Content-Length: 11
name=城市

请求头通常以键值对{key:value}方式传递数据。

key为规范的固定值

value为key对应的取值,通常是一个值,可能是一组。

1.7、http请求报文头属性

常见请求头
Referer:表示这个请求是从哪个url跳过来的,通过百度来搜索淘宝网,那么在进入淘宝网的请求报文中,Referer的值就是:www.baidu.com。如果是直接访问就不会有这个头。
在这里插入图片描述
常用于 : 防盗链。爬虫。
Accept:告诉服务端,该请求所能支持的响应数据类型,专业术语称为MIME 类型(文件类型的一种描述方式)
在这里插入图片描述

Accept:
 text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

MIME格式:大类型/小类型[;参数]

Accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8

例如:

text/html,html文件

text/css,css文件

text/javascript.js文件

image/*,所有图片文件

if-Modified-Sincce:浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存
Cookie:客户端的Cookie就是通过这个报文头属性传给服务端的

Cookie: JSESSIONID=15982C27F7507C7FDAF0F97161F634B5

User-Agent:浏览器通知服务器,客户端浏览器与操作系统相关信息

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

Connection:表示客户端与服务连接类型;Keep-Alive表示持久连接,close已关闭

Connection: keep-alive

Host:请求的服务器主机名

Host: sczpkj.f3322.net:3000

Content-Length:请求体的长度

POST http://39.108.107.149:8080/vk/app/rest/ddp/iModelServiceImpl/findModelByType HTTP/1.1
User-Agent: Fiddler
Host: 39.108.107.149:8080
Content-Length: 11
name=城市

Content-Type:请求的与实体对应的MIME信息。如果是post请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码

Content-Type: application/x-www-form-urlencoded

Accept-Encoding:浏览器通知服务器,浏览器支持的数据压缩格式。如GZIP压缩

Accept-Encoding: gzip, deflate

Accept-Language:浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n)

Accept-Language: zh-CN,zh;q=0.9

Cache-Control:指定请求和响应遵循的缓存机制

对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的。

Cache-Control: no-cache

请求体

当请求方式是post的时,请求体会有请求的参数,格式如下:

username=zhangsan&password=123

POST http://39.108.107.149:8080/vk/app/rest/ddp/iModelServiceImpl/findModelByType HTTP/1.1
User-Agent: Fiddler
Host: 39.108.107.149:8080
Content-Length: 20

name=城市&status=1

8.HTTP响应报文

在这里插入图片描述

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=E1352C5CCEAD7EA9A6F8DA253395781C; Path=/vk
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 26 Sep 2018 03:24:59 GMT
//此处有空格
1dd0

响应行:

①报文协议及版本;
例如:

HTTP/1.1 200 OK

状态码及状态描述; 认真看

状态码由3位数字组成第一个数字定义了响应的类别**

1xx:指示信息,表示请求已接收,继续处理

2xx:成功,表示请求已被成功接受,处理。

  • 200 OK:客户端请求成功
  • 204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
  • 206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容

3xx:重定向

  • 301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
  • 302 Found:临时重定向,表示请求的资源临时搬到了其他位置
  • 303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
  • 307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
  • 304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有

4xx:客户端错误

  • 400 Bad Request:客户端请求有语法错误,服务器无法理解。(前台向后台传递参数时可能发生)
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务
  • 404 Not Found:请求资源不存在。比如,输入了错误的url
  • 405 表示servlet请求的服务方法没有找到。
  • 415 Unsupported media type:不支持的媒体类型

5xx:服务器端错误,服务器未能实现合法的请求。

  • 500 Internal Server Error:服务器发生不可预期的错误。

    不仅要去看那个500错误,还要去看浏览器或者服务器给我们提供的别的错误信息,通过这些信息共同去确定错误的位置。

  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,

响应头:

③响应报文头,也是由多个属性组成
响应头也是用键值对k:v;
服务器通过响应头来控制浏览器的行为,不同的头浏览器操作不同

常见请求头 描述
*Location* 指定响应的路径,需要与状态码302配合使用,完成跳转。
Content-Type 响应正文的类型(MIME类型)取值:text/html;charset=UTF-8
*Content-Disposition* 通过浏览器以下载方式解析正文取值:attachment;filename=xx.zip
*Set-Cookie* 与会话相关技术。服务器向浏览器写入cookie
Content-Encoding 服务器使用的压缩格式取值:gzip
Content-length 响应正文的长度
Refresh 定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。取值:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn
Server 指的是服务器名称,默认值:Apache-Coyote/1.1。可以通过conf/server.xml配置进行修改。<Connector port=“8080” … server=“itcast”/>
Last-Modified 服务器通知浏览器,文件的最后修改时间。与If-Modified-Since一起使用。
Cache-Control 响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。常见的取值有常见的取值有private、public、no-cache、max-age,no-store,默认为private。缓存时间为31536000秒(365天)

响应体

④响应报文体,服务器发送给浏览器的正文,即我们真正要的“干货” ;
响应体,响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染 显示页面内容。
sql注入:PreparedStatement 动态

Statement 静态

Statement 静态sql

查询数据:"select * from student where id = " + id;
"select * from student where id = " + id = 5; drop table t_student;
此时id这个数据是从前台发送过来的,假如说我前台直接发送一个id,此时没有问题,程序正常执行,但是我如果发送 以下数据,会导致,前边的查询语句执行后,还会继续执行删除表的语句。大致数据库就崩了。
在这里插入图片描述

为什么需要cookie和session

因为http协议是一个无连接;无状态的协议,每一种请求之间互相独立,没有关联,所以无法在多次请求之间共享数据,
cookie和session就是用来解决这个共享数据的问题的。

一次会话包含多次请求和响应
会话 浏览器第一次给服务器发送请求开始—》到任意一方断开为止。

cookie

Cookies 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。Java Servlet 显然支持 HTTP Cookies。

概念:客户端会话技术:将数据保存到客户端

1.快速入门:

​ 步骤:

​ 1.创建cookie对象,绑定数据

new Cookie(String name,String value);

​ 2.响应cookie对象到浏览器

response.addCookie();
在这里插入图片描述

​ 3.获取cookie对象,获取数据。

Cookie[] cookies = request.getCookies()

在这里插入图片描述

原理

在这里插入图片描述

cookie注意事项

1一次可不可以发送多个cookie

可以。

2 cookie在浏览器中的保存时间
默认情况下:浏览器关闭cookie销毁
持久化存储
setMaxAge(int secods)方法
- 正数:将cookie存储到硬盘中,数字大小就是cookie的存活时间 以秒计
- 负数:默认
在这里插入图片描述
3 cookie中能不能存中文
tomcat8之前不行,tomcat8之后可以
4 cookie的共享问题
默认设置当前项目目录

setPath("/虚拟目录");

/day03

只要请求的路径在 上边虚拟目录下都可以访问。

如果需要在多个项目之间共享,可以设置

setPath("/");
在这里插入图片描述

cookie的特点

1,数据存储在浏览器上面
2,浏览器对单个cookie的数据大小有限制(4k),同一个域名下的cookie个数必须小于20个
3,数据必须是字符串,不能有特殊字符
特殊符号

[ ] ( ) = , " / ? @ : ;

例如使用:免登录操作(记住密码)。

案例

1运行项目进入登录页面,可以输入用户名和密码并且点击登录按钮,
2写一个CookieServlet01类,这个类负责获取客户端发来的数据,并且将数据用户名写入cookie中,
3再写一个CookieServlet02和CookieServlet03类,
4这两个类都负责获取Cookie并打印到控制台
5,要求在服务器不停止运行的情况下,一小时内关闭浏览器再打开并访问CookieServlet02或CookieServlet03仍会打印出获取到的用户名。

<html>
  <head>
    <title>登录页面</title>
  </head>
  <body>
  <form action="cookie01" method="post">
    用户名:<input type="text" name="name">
    密码:<input type="password" name="pwd">
    <input type="submit" value="登录">
  </form>
  </body>
</html>
@WebServlet("/cookie01")
public class CookieServlet01 extends HttpServlet {
    
    
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        /* 获取数据*/
        String name = req.getParameter("name");
        String pwd = req.getParameter("pwd");
        /*创建Cookie对象*/
        Cookie c1=new Cookie("name",name);
        Cookie c2=new Cookie("pwd",pwd);
        /*设置活时间*/
        c1.setMaxAge(60*60);
        c2.setMaxAge(60*60);
        /*向浏览器添加*/
        resp.addCookie(c1);
        resp.addCookie(c2);
        //setPath()方法 设置cookie的有效访问路劲
        //默认setpath(当前项目的虚拟路劲)http://localhost:8080/servlet03/cookie01
        /*
        * 假设有一个新的项目 虚拟路劲为servlet04
        * 访问路劲为 http://localhost:8080/servlet04
        * 此时两个路劲不一样 不能共享
        * 设置 c1.setPath("/")
        * 设置后此时两个路劲就有一个公共的路劲就
        * http://localhost:8080/*/
        c1.setPath("/");
        c2.setPath("/");
    }
}
@WebServlet("/cookie02")

public class CookieServlet02 extends HttpServlet {
    
    
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        Cookie[] cookies=req.getCookies();
        if (cookies.length>0){
    
    
           for (Cookie cookie:cookies){
    
    
               System.out.println(cookie.getName()+"+++"+cookie.getValue());
           }
        }
    }
}

session(是服务器端共享数据。)

概念: 在一次会话的多次请求之间共享数据,将数据保存在服务器端session对象中。

Cookie 共享数据的方式有存活时间

session是一直在服务器上面 到服务器关闭 时才消失

session 是一个接口
在这里插入图片描述

基本操作

1.获取session对象

req.getSession();
getSession(true); 直接获取session,如果session不存在,就创建一个。
getSession(false); 获取已经存在的session对象,如果不存在获取到null。

2.使用session对象

setAttribute(String name,Object value);设置session的值
getAttribute(name);根据session的名字,从session中获取值
removeAttribute(String name);删除session 

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在次输出就为null了
在这里插入图片描述

session在一次对话(多次请求)之间共享数据。

session的一些方法

在这里插入图片描述

session依赖于cookie的原理

在这里插入图片描述

注意事项

每个session都有一个ID,当客户端不关闭时切换服务时id不会改变

 String id = session.getId();//获取session的id 吧id 放到一个字符串
  System.out.println(id);

Cookie里面的JSESSIONID 就是 session的id
在这里插入图片描述

此时服务器没有关闭 session的id 都是一样的没有改变

当客户端关闭后,再次打开两次获取的session不是同一个。如果想保证是同一个,可以通过设置cookie来完成。

Cookie c = new Cookie("sessionid",session.getId());//获取id
c.setMaxAge(60*60);//设置时间
resp.addCookie(c);//添加cookie

把这个session的id放到Cookie里面 Cookie可以设置时间

注意web服务器默认会给每个session设置一个有效期, (30分钟)
了解:

session钝化:在服务器正常关闭之前将数据序列化到硬盘上。

session活化:在服务器启动过后将序列化到硬盘上的文件再读取到session对象中。

session的失效时间

1.服务器关闭时
2.session对象调用 invalidate()方法 手动失效
3.session默认失效时间是30分钟
可以配置修改 web.xml—session-config
在这里插入图片描述

登录案例

登录成功吧账号信息保存到session里面
1.输入姓名密码判断登录是否成功

2登录成功把账号信息保存到session
3跳转到另一个页面获取session中的账号信息

@WebServlet("/use/login")
public class UserController extends HttpServlet {
    
    
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        //设置编码格式
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        //获取数据
        String username = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        //操作数据
        IUserDao iUserDao=new IUserD();
        List<Map> maps = iUserDao.selectUser(username, Integer.parseInt(pwd));
        LayTab entiy;
        //判断
        if (maps.size()>0&&maps!=null){
    
    
            //创建session
            HttpSession session = req.getSession();
            session.setAttribute("user",maps.get(0));//就一个数据就直接获取第一个就行了、
            entiy=new LayTab(1,"登录成功");
        }else {
    
    
            entiy=new LayTab(0,"登录失败");
        }
        String s = JSON.toJSONString(entiy);
        resp.getWriter().write(s);
    }
}

前台

<html>
<head>
    <title>Title</title>
    <script src="/layui/layui.js"></script>
    <link rel="stylesheet"  href="/layui/css/layui.css" media="all">
</head>
<body>
<form class="layui-form" action=""  >
    <div class="layui-form-item">
        <div class="layui-inline">
            <label class="layui-form-label">用户名</label>
            <div class="layui-input-inline">
                <input type="text" name="username"    autocomplete="off" class="layui-input">
            </div>
        </div>
        <div class="layui-inline">
            <label class="layui-form-label">密码</label>
            <div class="layui-input-inline">
                <input type="password" name="pwd"   autocomplete="off" class="layui-input">
            </div>
        </div>

        <div class="layui-inline">
            <!--lay-filter="searchBtn":事件绑定-->
            <button type="submit" id="saveBtn" class="layui-btn" lay-submit=""
                    lay-filter="LoginBtn">登录</button>
        </div>
    </div>
</form>
<script>
    layui.use([ 'form','jquery'],function () {
    
    
    var form=layui.form;
    var $=layui.jquery;
    form.on('submit(LoginBtn)',function (dat) {
    
    
        var formdata=dat.field;
        $.ajax({
    
    
            type:"get",
            dataType:"json"
            ,url:"/use/login"
            ,data:formdata
            ,success:function (a){
    
    
                if (a.code==1){
    
    
                    alert(a.msg)
                    window.location.href="/index.jsp";
                }else {
    
    
                    alert(a.msg)
                }
            }
        })
        return false;
    })
    })

</script>
</body>
</html>

特点

1.session用于存储一次共享会话的多次请求的数据,在服务器端。
2.session可以存储任意数据类型,任意大小的数据。

cookie和session的区别

1、 session存在服务器端;cookie存在客户端
2、 session由服务器自己创建;Cookie也是服务器写进去响应到客户端
3、session存的对象,每一个客户端是不同的,;Cookie存的是字符串,也是每一个客户端独享 ,
4、客户端访问服务器,会带着一个jsessionid,如果没有服务器自动创建一个响应给客户端,下次请求带着,session靠jsessionid进行识别用户。
5、cookie不是很安全,可以分析本地的cookie进行cookie欺骗,session安全一点

猜你喜欢

转载自blog.csdn.net/qq_45438019/article/details/120288357