我已经阅读了很多内容,因为我想在不同的域上启用不同的商店,以便将文章(和预订)添加到一个全球购物车并执行单个结帐。
对此有很多疑问,这就是为什么我开始思考,我的解决方案真的不安全,因为它看起来确实像魅力一样。我们的想法是使用包括凭据在内的ajax请求调用globalcart.com(添加和检索购物车时。并将所有购物车数据存储在globalcart.com上的会话变量中
似乎很容易维护会话变量跨域(我测试了下面的代码,客户端通过ajax直接访问http://globalcart.com/getsession.php时获得相同的会话ID):
cart-one.com:
<html>
<head>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
<script>
jQuery(document).ready(function(){
jQuery.ajax({
url: "http://globalcart.com/getsession.php",
crossDomain: true,
xhrFields: {
withCredentials: true
},
success: function(result){
jQuery("#ses").text(result);
}});
})
</script>
</head>
<body>
<div id="ses">ses</div>
</body>
</html>
globalcart.com
<?php
header("Access-Control-Allow-Credentials: true");
if (isset($_SERVER['HTTP_ORIGIN'])) {
$http_origin = $_SERVER['HTTP_ORIGIN'];
// using this method because * is not allowed with credentials
// we could limit this by checking that the http_origin matches a list of domains, but now now
header("Access-Control-Allow-Origin: $http_origin");
}
else{
header("Access-Control-Allow-Origin: *");
}
header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header('Access-Control-Allow-Headers: X-Requested-With, content-type, access-control-allow-origin, access-control-allow-methods, access-control-allow-headers');
header('P3P: CP="CAO PSA OUR"'); // Makes IE to support cookies
if (session_status() != PHP_SESSION_ACTIVE || session_status() != 2) {
session_start();
}
echo session_id();
?>
当然,我会创建一个在服务器端接受的域名的白名单,但在示例中我允许所有域名。
但有任何缺点吗?这种方法的主要关注点是什么?
谢谢!