Maison  >  Article  >  développement back-end  >  Mécanisme de vérification de la cohérence des données inter-domaines de session PHP

Mécanisme de vérification de la cohérence des données inter-domaines de session PHP

PHPz
PHPzoriginal
2023-10-12 13:06:231272parcourir

PHP Session 跨域的数据一致性验证机制

Mécanisme de vérification de la cohérence des données entre domaines de session PHP

Avec le développement d'Internet, l'accès entre domaines est devenu une exigence courante, et lors de l'accès entre domaines, le maintien de la cohérence des données est devenu un défi important . PHP fournit un mécanisme de session pour maintenir la cohérence des données entre les différentes requêtes, mais par défaut, l'accès inter-domaines à la session n'est pas possible. Cet article présentera un mécanisme basé sur des jetons pour réaliser une vérification de la cohérence des données d'une session PHP dans un accès inter-domaines en ajoutant un mécanisme de vérification personnalisé et fournira des exemples de code spécifiques.

1. Introduction au mécanisme de session

La session est une méthode de stockage de données maintenue côté serveur, qui peut enregistrer de manière persistante les données utilisateur et réaliser un transfert de données par requête croisée. En PHP, Session génère un ID de session unique et stocke les données dans un fichier ou une base de données côté serveur. Lorsque l'utilisateur visite d'autres pages, les données de session d'origine sont restaurées via l'ID de session.

2. Problèmes d'accès entre domaines

Par défaut, le mécanisme de session PHP ne peut partager des données qu'entre le même nom de domaine ou nom de sous-domaine. Lorsqu'un accès inter-domaines est requis entre différents noms de domaine, l'ID de session ne peut pas être partagé entre les demandes, ce qui entraîne l'impossibilité d'obtenir les données de session d'origine.

3. Mécanisme de vérification de la cohérence des données basé sur un jeton

Afin de résoudre le problème de cohérence des données de l'accès inter-domaines de session, vous pouvez ajouter un mécanisme de jeton pour vérifier si l'ID de session du même utilisateur sous différents noms de domaine est valide. . Les étapes spécifiques de mise en œuvre sont les suivantes :

  1. Lorsque l'utilisateur se connecte, stockez l'ID de session et les données relatives à l'utilisateur dans la base de données et générez un jeton unique.
  2. Renvoyez le jeton à l'utilisateur et définissez un identifiant d'accès inter-domaines dans le cookie (par exemple, en définissant le domaine comme nom de domaine principal au lieu du nom de sous-domaine actuellement visité).
  3. Lorsque l'utilisateur fait une demande inter-domaine, le Token est obtenu grâce à l'identification inter-domaine dans le cookie et transmis au serveur du nom de domaine cible.
  4. Après avoir reçu le Token, le serveur du nom de domaine cible le compare avec le Token dans la base de données.
  5. Si le jeton correspond avec succès, l'ID de session de l'utilisateur sera renvoyé au serveur du nom de domaine cible.
  6. Le serveur du nom de domaine cible obtient les données relatives à l'utilisateur via l'ID de session et les traite en conséquence.

4. Exemple de code

Ce qui suit est un exemple de code simple pour démontrer le mécanisme de vérification de la cohérence des données basé sur un jeton. Supposons qu'il existe deux noms de domaine : www.example.com et app.example.com.

  1. Lorsque l'utilisateur se connecte, le Token est généré et stocké dans la base de données.
// Generate unique token
$token = uniqid();

// Store token along with user data in database
$db->query("INSERT INTO users (token, username) VALUES ('$token', '$username')");
  1. Après une connexion réussie, le jeton sera renvoyé à l'utilisateur et l'identification inter-domaines sera définie dans le cookie.
setcookie('token', $token, time()+3600, '/', 'example.com', false, true);
  1. Dans une requête cross-domain, transmettez le Token dans le cookie au serveur du nom de domaine cible.
// Retrieve token from cookie
var token = document.cookie.match('(^|;) ?token=([^;]*)(;|$)')[2];

// Make cross-domain request with token
fetch('https://app.example.com/api', {
    headers: {
        'Authorization': 'Bearer ' + token
    }
})
.then(response => response.json())
.then(data => {
    // Handle response data
})
.catch(error => {
    // Handle error
});
  1. Comparez le serveur du nom de domaine cible avec le Token dans la base de données.
// Retrieve token from request
$token = $_SERVER['HTTP_AUTHORIZATION'];

// Query token from database
$result = $db->query("SELECT * FROM users WHERE token = '$token'");

if ($result->num_rows > 0) {
    // Token is valid, retrieve session ID
    $session_id = session_id();
    // Perform operations with session data
} else {
    // Token is invalid, handle unauthorized access
}

5. Résumé

En ajoutant un mécanisme de vérification basé sur des jetons, la vérification de la cohérence des données de la session PHP dans l'accès inter-domaines peut être réalisée. Bien que ce mécanisme présente une certaine complexité par rapport au partage direct de l'ID de session, il peut résoudre efficacement le problème de cohérence des données lors de l'accès entre domaines et améliorer l'expérience utilisateur et la sécurité du système.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn