zoukankan      html  css  js  c++  java
  • php前后端分离项目跨域

    现在项目越来越流行前后端分离,但最近在前后端分离的项目中遇到一个问题,获取session里面存入的用户信息总是为null,这是因为实现了前后端分离后跨域导致了会话不一致,由于之前一直没有做过前后端分离项目,导致走了不少弯路,而且还采用了多种及其不优雅的方法
    1.(在第一次请求的时候把服务器返回的session id保存起来,后续请求的时候把该session id作为参数传递给后端,
    后端在每次请求的时候先判断客户端传递过来的参数中session id是否为空,不为空则设置当前session id为传递过来的session id,然后session_start,为空则直接session_start。)
    2.后端使用openssl对称加密来把用户信息封装为一个token来存储在前端,在每次请求时来校验token来确认用户是否登录,但这样不仅麻烦还不怎么安全。

    上面那样做的原因是,ajax请求无法获取header、cookie等信息。但是后来发现有更方便的解决方法。jquery的ajax请求中可以设置下面两个参数,浏览器会自动帮你保存、发送这些header信息。

    xhrFields: { withCredentials: true },
    crossDomain: true,
    //
    $.ajax({
        url: "url",                 //请求的url地址
        dataType: "json",       //返回格式类型为json  可选参数(jsonp,html,xml,text,script,json  
        xhrFields: { withCredentials: true },//需要设置的参数
        crossDomain: true,//需要设置的参数
        async: true,                //请求是否异步,默认为true:异步,这也是ajax重要特性  可不写该参数
        type: "post",          //请求方式类型(put,delete,post,get)
        data: { 
    },     
        beforeSend: function() {
            //请求前的处理操作
        },
        success: function(data,textStatus) { //此处data为返回值
            //请求成功时处理操作
        },
        complete: function() {
            //请求完成的处理操作
        },
        error: function() {
            //请求出错处理操作
        }
    });

    PHP端则需要设置header头

    $origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';
    // 允许所有跨域请求,测试用,生产环境请使用具体域名代替
    header('Access-Control-Allow-Origin:'.$origin);
    header('Access-Control-Allow-Credentials:true');

    ----------来源:https://www.cnblogs.com/alone-hy/p/11949754.html

  • 相关阅读:
    1201JavaScript事件(Events)
    1201Js对象##正则表达式##
    CSS样式表基本概念
    1124Js基础语法
    网页学习大纲(1116/1130适用于预习或复习)
    1117网页基础--表单
    1117网页基础--框架frameset / iframe
    数据库基础(触发器)
    数据库基础(视图)
    数据库基础(定义变量来查询的练习、存储过程)
  • 原文地址:https://www.cnblogs.com/weixiaofantasy/p/12758549.html
Copyright © 2011-2022 走看看