300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > php 跨域 session 什么是跨域?session如何共享?PHP和Ajax跨域问题的解决方法 |

php 跨域 session 什么是跨域?session如何共享?PHP和Ajax跨域问题的解决方法 |

时间:2023-06-12 11:21:55

相关推荐

php 跨域 session 什么是跨域?session如何共享?PHP和Ajax跨域问题的解决方法 |

什么是跨域?

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域。/index.html 调用 /api.php (非跨域)

/index.html 调用 /api.php (主域名不同:xtboke/xtboke2,跨域)

/index.html 调用 /api.php (子域名不同:tool/music,跨域)

:8080/index.html 调用 :8081/api.php (端口不同:8080/8081,跨域)

/index.html 调用 /api.php (协议不同:http/https,跨域)

localhost和127.0.0.1虽然都指向本机,但也属于跨域。

解决办法:

跨域的解决办法有很多,本文主要分享一下通过设置Access-Control-Allow-Origin来实现跨域。

例如:客户端的域名是,而请求的域名是。

如果直接使用ajax访问,会有以下错误:

XMLHttpRequestcannot load /server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin '' is therefore not allowed access.

1.允许单个域名访问

指定某域名()跨域访问,

则只需/api.php文件头部添加如下代码:header('Access-Control-Allow-Origin:');

2.允许多个域名访问

指定多个域名(、等)跨域访问,则只需在

/api.php文件头部添加如下代码:$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';

$allow_origin = array(

'',

''

);

if(in_array($origin, $allow_origin)){

header('Access-Control-Allow-Origin:'.$origin);

}

3.允许所有域名访问

允许所有域名访问则只需在/api.php文件头部添加如下代码:header('Access-Control-Allow-Origin:*');

SESSION共享问题:

下面是我整理的一份PHP session跨域共享的代码示例,记录一下。

client.php <?php

header("Content-Type:text/html;charset=utf-8");

session_start();

$token = md5(uniqid(rand(), TRUE));

$_SESSION["token"]=$token;

?>

$.ajax({

type:'get',

url: "/server.php",

dataType: "jsonp",

jsonp:'callback',

data:{

'cToken':"<?php echo $_SESSION['token'];?>"

},

xhrFields: {withCredentials: true},

crossDomain: true,

success: function(data) {

$(".info").html("客户端token:" + data.cToken + "

服务端token:" + data.sToken+"

是否相等:" + data.ifEq);

}

});

server.php <?php

session_start();

$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';

$allow_origin = array(

'',

''

);

if(in_array($origin, $allow_origin)){

header('Access-Control-Allow-Origin:'.$origin);

//跨域且使用session时不能使用 *

header("Access-Control-Allow-Credentials: true" );//是否携带cookie

}

$arr = array(

'cToken'=>$_GET['cToken'],

'sToken'=>$_SESSION['token'],

'ifEq'=>$_SESSION['token']==$_GET['cToken']?'yes':'no'

);

$callback = !empty($_GET['callback']) ? trim($_GET['callback']) : '';

if(!empty($callback)) {

echo $callback."(".json_encode($arr).")";

}else{

echo json_encode($arr);

}

php 跨域 session 什么是跨域?session如何共享?PHP和Ajax跨域问题的解决方法 | IT小天博客个人技术博客...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。