Maison > Article > interface Web > Une explication de la solution à la perte de cookies dans l'accès inter-domaines ajax
L'accès inter-domaines Ajax peut être obtenu en utilisant la méthode jsonp ou en définissant Access-Control-Allow-Origin. Concernant la configuration d'Access-Control-Allow-Origin pour obtenir un accès inter-domaine, vous pouvez vous référer à l'article que j'ai écrit auparavant. "Paramètre ajax Access-Control- Allow-Origin pour obtenir un accès inter-domaines》
Créez d'abord deux domaines de test nomme
a.fdipzone .com comme nom de domaine client
b.fdipzone.com comme nom de domaine serveur
Code de test
setcookie.php est utilisé pour définir les cookies du serveur
<?phpsetcookie('data', time(), time()+3600);?>
server.php est utilisé pour être demandé par le client
<?php$name = isset($_POST['name'])? $_POST['name'] : '';$ret = array( 'success' => true, 'name' => $name, 'cookie' => isset($_COOKIE['data'])? $_COOKIE['data'] : '');// 指定允许其他域名访问header('Access-Control-Allow-Origin:http://a.fdipzone.com');// 响应类型header('Access-Control-Allow-Methods:POST'); // 响应头设置header('Access-Control-Allow-Headers:x-requested-with,content-type'); header('content-type:application/json');echo json_encode($ret);?>
test.html Page de demande du client
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <title> ajax 跨域访问cookie丢失的解决方法 </title> </head> <body> <script type="text/javascript"> $(function(){ $.ajax({ url: 'http://b.fdipzone.com/server.php', // 跨域 dataType: 'json', type: 'post', data: {'name':'fdipzone'}, success:function(ret){ if(ret['success']==true){ alert('cookie:' + ret['cookie']); } } }); }) </script> </body></html>
Première exécution de http : //b.fdipzone.com/setcookie.php, crée des cookies côté serveur.
Ensuite, exécutez http://a.fdipzone.com/test.html
Sortie
{"success":true,"name":"fdipzone","cookie":""}
Échec de l'obtention du cookie.
Client
Définissez l'attribut withCredentials sur true permet de spécifier que les informations d'identification doivent être envoyées pour une certaine demande. Si le serveur reçoit une demande avec des informations d'identification, il répondra avec les en-têtes HTTP suivants.
Serveur Définir l'en-tête
header("Access-Control-Allow-Credentials:true");Autoriser les requêtes avec informations de vérification
test.html Modifiez comme suit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <title> ajax 跨域访问cookie丢失的解决方法 </title> </head> <body> <script type="text/javascript"> $(function(){ $.ajax({ url: 'http://b.fdipzone.com/server.php', // 跨域 xhrFields:{withCredentials: true}, // 发送凭据 dataType: 'json', type: 'post', data: {'name':'fdipzone'}, success:function(ret){ if(ret['success']==true){ alert('cookie:' + ret['cookie']); } } }); }) </script> </body></html>
server.php Modifiez comme suit
<?php$name = isset($_POST['name'])? $_POST['name'] : '';$ret = array( 'success' => true, 'name' => $name, 'cookie' => isset($_COOKIE['data'])? $_COOKIE['data'] : '');// 指定允许其他域名访问header('Access-Control-Allow-Origin:http://a.fdipzone.com');// 响应类型header('Access-Control-Allow-Methods:POST'); // 响应头设置header('Access-Control-Allow-Headers:x-requested-with,content-type');// 是否允许请求带有验证信息header('Access-Control-Allow-Credentials:true'); header('content-type:application/json');echo json_encode($ret);?>Suivez les étapes précédentes et la requête reviendra
{"success":true,"name":"fdipzone","cookie":"1484558863"}Obtention réussie du cookie
XMLHttpRequest cannot load http://b.fdipzone.com/server.php. Credentials flag is 'true', but the 'Access-Control-Allow-Credentials' header is ''. It must be 'true' to allow credentials. Origin 'http://a.fdipzone.com' is therefore not allowed access.2. Une fois que l'en-tête du serveur a défini Access-Control-Allow-Credentials : true, Access-Control-Allow-Origin ne peut pas être défini sur * et doit être défini sur un nom de domaine, sinon une erreur sera restitué.
XMLHttpRequest cannot load http://b.fdipzone.com/server.php. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://a.fdipzone.com' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.Cet article explique la solution à la perte de cookies dans l'accès inter-domaines ajax. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois. Recommandations associées :
Explication sur la méthode de calcul de key_len dans mysql expliquer
Comment utiliser curl pour simuler ip et accédez à la source
Convertissez les données NULL via la méthode MySQL
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!