16.跨域_Cookie_Session

只有引入中间件才可以敲后台代码

在这里插入图片描述

浏览器向服务器要数据,先访问服务器,服务器根据请求向数据库要数据。数据库的数据返回给服务器,服务器在返回给浏览器

<tr>:是一行

<th>:表头

<td>:单元格普通的数据

现在前端开发基本用React/Vue

在这里插入图片描述

浏览器一开始访问服务器的index.html,服务器会返回index.html给它,所以浏览器上面会显示index.html给用户看。用户在看的时候就会点击按钮

在浏览器的html页面,点击有JS代码链接的按钮,执行JS代码,JS就会请求到服务器的UserServlet,UserServlet就会把数据送回到浏览器,浏览器拿到这个数据,index.html页面带有JS代码就会执行JS,解析JS代码,展示到用户面前

第一次请求用来展示index.html,第二次请求是由index.html代码里的JS发起的

在这里插入图片描述

前后端分离:后端工程师写的是JAVA代码,前端工程师一般是写HTML、CSS、JS,把前后端的代码放在一起,改起来很乱,特别是动态页面,前后端将分不清,耦合在一起,非常恶心。

前端和后端代码要分开来,一共是两台服务器,一台放前端代码,另一台放后端代码

浏览器先访问页面服务器,拿到index.html,index.html页面有一个按钮,一点那个按钮,就会执行JS代码,去访问后台工程师编写的服务器接口,这个时候UserServlet就会去访问数据库,把数据库的数据变成JS,然后返回给浏览器,前端工程师写的JS就会去解析返回的JS,变成漂亮的页面展示到用户面前

IJ编程软件,页面服务器用的是node.js服务器,直接点浏览器运行就可以部署一台服务器了

在这里插入图片描述

这是两台服务器

异步请求默认是不能够跨域的,因为它受到了同源策略的影响

在这里插入图片描述

AJAX请求是异步请求中的一种

a标签也可以

在这里插入图片描述
这个就是跨域,从一个服务器到另一个服务器

跨域资源共享:从一个域访问另外一个域的资源,受到了浏览器同源策略的影响

主要是为了保护服务器数据的安全

跨域问题一般在前端解决

在这里插入图片描述

Origin:跨域请求时告诉服务器,我现在所处的域名

可以通过BP来伪造Origin

Access-Control-Allow-Origin:告诉浏览器,我允许哪些网站页面可以拿到我的数据

*:代表什么都可以

浏览器发送请求头Origin给服务器,我要跨域请求,服务器拿到请求后,服务器会给回一个响应头Access-Control-Allow-Origin加请求体过去,浏览器拿到数据后,会查看响应头,发现原来这个JS数据是给我浏览器页面的,它拿到请求体就会用index.html页面的JS去解析,然后展示在浏览器页面上给我们看

如果服务器没有设置Access-Control-Allow-Origin,浏览器也会拿到JS数据,但是浏览器会去查看响应头,这个是不是给我现在页面的,发现没有这个响应头,浏览器就不会给index.html页面,所以页面就拿不到这个数据,被浏览器给阻止了

在没有登录之前,我们平时是进不了用户界面的

在这里插入图片描述

访问用户页面,发现没有登录过,服务器会重定向到登录页面,只有你登陆成功,你才可以访问我的用户页面

在这里插入图片描述

在浏览器的登录页面,输账号和密码,点击登录按钮,发送login请求,服务器loginServlet接收请求进行判断,然后返回响应

在这里插入图片描述

在用户页面进行数据访问,服务器返回数据

HTTP请求之间是完全独立的,上一次请求跟我这一次请求是没有关系的

如何记录客户访问成功还是失败

在这里插入图片描述

在服务器里面搞一个内存,用来记录之前成功的访问记录,当用户进行请求时,我去内存里面检查之前有没有登录过

服务器要能识别请求是否来自同一个浏览器

Cookie:在客户端(浏览器)存储一些数据,而且是存储到本地磁盘(硬盘)

服务器可以通过响应头的形式返回Cookie交给客户端去存储

Session:在服务器存储一些数据,存储到内存中,也可以通过一个方案,把内存中的数据导到硬盘中去。但一般不会这么做

登录成功,服务器会为这个浏览器这次请求创建一个session对象,对象里会有id、用户信息,并且发送一个登录成功加响应头Set-Cookie,交给客户端,Set-Cookie里面有服务器设置的很多信息

客户端拿到Set-Cookie,就会把它存到本地,浏览器这边就会有一个Cookie,Cookie里会有id、domain、path,domain、path记录着将来请求到什么地方,会带上一个Cookie

当再次访问管理页面的时候,请求头就会带上Cookie

服务器会去检查请求头,发现里面的Cookie跟我存的Session是一样的,说明浏览器曾经登录成功过,这个时候,服务器会返回浏览器请求的数据

用户信息里面有什么,是由JAVA工程师决定的

在这里插入图片描述

根据客户端发过来的Cookie,服务器来确定是哪一个Session,同时在对应的Session里面执行发过来的数据,比如,是要添加商品,还是要查看数据

利用Session和Cookie的技术,可以把本就独立的请求给连接在一起

可以把用户想要添加的数据直接存到数据库,而不是用Session

在浏览器上存储的数据,通过手机和小程序都可以查看到数据,说明数据是存储在数据库,在手机和小程序上看不到,说明它是存储在Session,这是一个会话跟踪技术,只有建立连接的那一方才可以看到,它跟浏览器已经绑在一起了,你在其它地方(设备)登录,你也看不到这个数据,这是一个私密连接

在这里插入图片描述

登录成功返回的Set-Cookie里只有JSEESIONID,Session对象里的用户数据是不会返回的,因为一旦用户数据返回到客户端是危险的,这是不被不允许

在这里插入图片描述

后面那些是软件加的,不用去管它,在以后的访问相同路径下的文件过程当中Cookie都是自动加入的

浏览器一关,默认本地的Cookie会被删掉,但是我们可以设置保存时间,不关,30分钟删掉

request.getSession()的执行过程

1.如果request没有带JSEESIONID,就会创建新的Session对象

2.如果request带了JSEESIONID,就会返回对应的Session对象

必须要有在登陆页面成功登录过,才可以拿到用户数据,才可以拿到Session对象的JSEESIONID,(因为你只有登录过。才会有Session对象)没登录过的JSEESIONID是系统默认的

我们平时在执行退出功能,其实是在销毁Session对象

会话跟踪技术:一个Session跟着一个浏览器,他是看多次请求之间是不是同一个会话,如果多次请求带了同一个JSEESIONID,说明是同一个会话,那他们之间就会产生联系

Guess you like

Origin blog.csdn.net/m0_53008479/article/details/120982316