Maison  >  Article  >  développement back-end  >  Solution au problème inter-domaines de session PHP

Solution au problème inter-domaines de session PHP

PHPz
PHPzoriginal
2023-10-12 15:00:251280parcourir

PHP Session 跨域问题的解决方法

Solution au problème inter-domaines de session PHP

Dans le développement où le front-end et le back-end sont séparés, les requêtes inter-domaines sont devenues la norme. Lorsque nous traitons de problèmes interdomaines, nous impliquons généralement l'utilisation et la gestion de sessions. Cependant, en raison des restrictions de la politique d'origine du navigateur, les sessions ne peuvent pas être partagées par défaut entre les domaines. Afin de résoudre ce problème, nous devons utiliser certaines techniques et méthodes pour réaliser le partage de sessions entre domaines.

1. Utilisez des cookies pour partager des sessions entre domaines

La solution la plus courante consiste à utiliser des cookies pour partager des sessions entre domaines. Étant donné que les cookies ne sont pas limités par la politique de même origine, les informations de session peuvent être transférées et partagées entre différents noms de domaine.

Les étapes spécifiques sont les suivantes :

  1. Définir la session côté serveur, par exemple :
session_start();
$_SESSION['user'] = 'example';
  1. Stocker les informations d'identification de session dans le cookie, telles que :
setcookie(session_name(), session_id(), time() + 60*60*24*30, '/', 'www.example.com', false, true);

Parmi eux, www.example.com code> est le nom de domaine du serveur actuel et doit être modifié en fonction de la situation réelle. <code>www.example.com 是当前服务端的域名,需要根据实际情况进行修改。

  1. 在跨域请求的客户端,发送带有 cookie 的请求,如:
fetch('http://www.example.com/api', {
  credentials: 'include',
})

其中,credentials: 'include'

    Dans le client de requête inter-domaines, envoyez une requête avec cookie, tel que :
    1. session_id($_COOKIE[session_name()]);
      session_start();
      if(isset($_SESSION['user'])){
          // session 跨域共享成功
      }else{
          // session 跨域共享失败
      }
    2. Parmi eux, les identifiants : 'include' sont utilisés pour informer le navigateur envoie les informations d'identification, y compris le cookie, au serveur.

    Le serveur analyse le cookie et réinitialise la session, par exemple :

    $token = bin2hex(random_bytes(16));
    // 将 token 存储到数据库中
    // 返回 token 给客户端
      2. Utilisez un jeton pour partager une session entre domaines
    1. Une autre solution consiste à utiliser un jeton pour réaliser un partage de session entre domaines. Les étapes spécifiques sont les suivantes :
    1. Lors de la connexion, générer un token et le stocker dans la base de données, associée à l'utilisateur, comme par exemple :
    2. rrreee
    3. Stocker le token dans le localStorage local ou sessionStorage côté client .
    Lors d'une requête cross-domain, envoyez le token au serveur en paramètre ou dans l'en-tête de la requête.

    Le serveur analyse le jeton, vérifie la validité du jeton en interrogeant la base de données et effectue les paramètres et la gestion de session correspondants.

    Il est à noter que afin d'assurer la sécurité, le token doit avoir une durée de validité et être actualisé dans un certain délai. Côté serveur, les jetons expirés doivent être nettoyés régulièrement.

    🎜Résumé : 🎜🎜Voici deux méthodes courantes pour résoudre le problème inter-domaines de la session PHP. Vous pouvez choisir la solution appropriée en fonction de votre situation réelle. Que des cookies ou des jetons soient utilisés, le traitement correspondant doit être effectué côté serveur pour réaliser le partage de sessions entre domaines. Dans le même temps, afin d'assurer la sécurité, nous devons également prendre certaines mesures pour protéger la sécurité des données de session. 🎜

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