第十六天:跨域-cookie-session

第十六天:跨域-cookie-session

跨域

这是个安全策略,只能我允许的域名才能访问

前后端分离

image-20211016193111139

通过这样的方式后,我们的项目打不开,前端解析会出现问题,这就是跨域的问题

image-20211016193523174

同源策略

浏览器有个同源策略(Same-Origin Policy)

  • 它规定了:默认情况下,AJAX请求只能发送给同源的URL
  • 同源是指3个相同:协议、域名(IP)、端口

image-20211016193807490

但是img vidio等图片不受同源策略的影响

所以我们俩不同源,所以访问不到数据

当我们通过这样的方式去访问时,就是跨域访问,我们怎么去解决这个问题,这个就牵扯到了跨域资源共享问题

解决AJAX跨域请求的常用方法

  • CORS (cross-origin Resource Sharing),跨域资源共享

  • CORS的实现需要客户端和服务器同时支持

客户端
所有的浏览器都支持(IE至少是IE10版本)

服务器

  • 需要返回相应的响应头(比如Access-Control-Allow-origin)
  • 告知浏览器这是一个允许跨域访问的请求

服务器在别人设置CORS,允许别人能够跨域访问

image-20211016194411942

允许这个http://localhost:7777 的域就能访问它

cookie

在客服端存储数据(浏览器)

服务器可以返回cookie交给客服端去存储

image-20211016201525226

当浏览器登录成功后,服务器会用session存下用户数据,并向客服端返回一个cookieID让浏览器存下cookie。当浏览器再次请求/users URL地址,在请求中就会带上cookie字段,当服务器检测到cookie后,就会返回你要的数据

cookie作用域

domain和path标识定义了Cookie的作用域,即Cookie应该发送给哪些URLdomain
标识指定了哪些主机可以接受Cookie
如果不指定,默认为当前文档的主机(不包含子域名);如果指定了domain,则一般包含例如:如果设置domain=520it.com,则Cookie也包含在子域名中(如bbs.520it.cor
path
标识指定了主机下的哪些路径可以接受Cookie,子路径也会被匹配例如:设置path=/docs,则以下地址都会匹配
/docs
/ docs/one// docs/one/img

cookie只争对一个浏览器

Session

在服务器存储一些数据

服务器为了保存用户状态而创建的一个特殊的对象。

当浏览器第一次访问服务器时,服务器创建一个session对象(该
对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId
以cookie的方式发送给浏览器。
当浏览器再次访问服务器时,会将sessionId发送过来,服务器依据
sessionId就可以找到对应的session对象。

如何获得session对象?

方式一 HttpSession s = request.getSession(boolean flag);

HttpSession是一个接口。
当flag为true时:
先查看请求当中是否有sessionId,如果没有,则创建一个session对象。如果有,则依据sessionId查找对应的session对象,如果找到了,则返回该对象,如果找不到,创建一个新的session对象。
当flag为false时:
先查找请求当中是否有sessionId,如果没有,返回null。如果有,则依据sessionId查找对应的session对象,如果找到了,则返回该对象,如果找不到,返回null。

image-20211016203742426

Session 的销毁

为了避免Session中存储的数据过大,Session需要销毁:

  1. 超时自动销毁。

    1. 从用户最后一次访问网站开始,超过一定时间后,服务器自动销毁Session,以及保存在Session中的数据。

    2. Tomcat 服务器默认的Session超时时间是30分钟

    3. 可以利用web.xml设置超时时间单位是分钟,设置为0表示不销毁。

      20

  2. 调用API方法,主动销毁Session

    session.invalidate()

image-20211016203813335

public class DeleteServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        HttpSession session = request.getSession();
        session.invalidate();
        response.setContentType(
                "text/html; charset=utf-8");
        response.getWriter().println("呵呵!"); 
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值