2013-06-17 6 views
0

J'ai la configuration d'une simple session de connexion de l'utilisateur comme ci-dessous dans les pages de mon application web:cookies php sur la charge des serveurs web équilibré

if (!isset($_SESSION['username'])){ 
      if (isset($_COOKIE['username'])){ 
       $_SESSION['username'] = $_COOKIE['username']; 
      } 

j'ai commencé à remarquer que dans certaines occasions, je perdrais ma session de connexion. J'ai vérifié l'heure d'expiration des cookies et c'était définitivement fixé pour une date ultérieure. Le comportement était assez aléatoire où parfois la réplication de l'action ne causerait pas le problème.

Aujourd'hui, j'ai découvert que les serveurs Web (x2) sont équilibrés en charge (maladroit de ma part de ne pas avoir remarqué cela) et maintenant je pense que le problème crache quand un utilisateur envoie une requête au 2ème serveur web où le cookie n'existe pas.

J'aurais pensé que lorsque vous frapperiez un serveur web, il maintiendrait une session avec lui. Cependant, le comportement suggère le contraire.

Je n'ai pas encore parlé à l'administrateur web. Y a-t-il une solution magique avec laquelle l'administrateur web peut me régler? ou est-ce un problème de mise en œuvre? Si oui, des idées sur la façon dont je peux résoudre cela?

Les suggestions sont très appréciées.

+0

Pouvez-vous stocker la session dans memcache (d)? Si tel est le cas, vous pouvez utiliser memcache comme mémoire cache/session distribuée pour tous vos serveurs Web. – JimL

+0

@JimL: Merci, mais jamais entendu parler de ça. Je vais devoir le chercher maintenant et le découvrir. – kaizenCoder

Répondre

0

Le cookie ne se soucie pas du serveur principal qui gère la requête, sauf si l'URL change. Si l'URL passe de www1.xxx.xx à www2.xxx.xx, vous pouvez enregistrer les cookies avec le chemin d'accès inclus (xxx.xx) et les deux sous-domaines pourront voir le cookie.

Une autre chose qui risque le plus de mal tourner est que les sessions ne sont pas partagées entre les deux serveurs. Vous pouvez utiliser memcached pour cela.

+0

Salut, comment voulez-vous dire par «enregistrer les cookies avec le chemin inclus? Voulez-vous dire le passer dans l'URL et y accéder? – kaizenCoder

+0

voir http://php.net/manual/en/function.setcookie.php mais je pense à dire domain, pas path. Pardon –

Questions connexes