Panier de persistance: $_SESSION ou cookie de navigateur?
Sur un site e-commerce avec aucun nom d'utilisateur/login persister panier de données, il serait mieux d'utiliser le PHP $_SESSION variable ou un cookie de navigateur pour persister les articles dans le panier? Je me penche vers $_SESSION depuis les cookies peuvent être désactivés, mais j'aimerais entendre les pensées de vous.
Je vous remercie d'avance pour votre considération.
- Que faire si vous avez à la fois? L'inconvénient avec
$_SESSION
est que la session est désactivée lorsque le navigateur est fermé. Des sessions d'utilisation, mais de tenter de remplir le$_SESSION
de données à partir d'un cookie, si elle est disponible. - vous devez ajouter cette une réponse.
- Faire ce que @Travesty3 dit, rappelez-vous: Ne pas stocker des informations sensibles dans les cookies. Elles voyagent tout le temps en arrière à partir du navigateur au serveur et sont susceptibles d'être reniflé ou piraté.
- Pense que vous vouliez dire, des informations "sensibles"; -)
- De le stocker dans la session est sûr et donc très bien, mais @Xeoncross explique pourquoi il est probablement plus utile pour stocker uniquement un IDENTIFIANT unique dans la session et de stocker les données dans votre base de données.
Vous devez vous connecter pour publier un commentaire.
Ni
Pas de grands sites oserait magasin de l'utilisateur du chariot dans une session ou un cookie qui n'est qu'à de précieux.
Ce que les clients achètent, quand ils sélectionner des éléments, la façon dont beaucoup de qu'ils achètent, pourquoi ils ne l'ont pas terminé la caisse, etc.. sont tous très, très importantes pour votre entreprise.
Utiliser une table de base de données pour stocker ces informations et de les lier à la session de l'utilisateur. De cette façon, vous n'avez pas perdre de l'information et de la vous pouvez revenir en arrière et de construire des statistiques basées sur les utilisateurs de chariots ou de résoudre des problèmes avec votre processus de commande.
Journal tout ce que vous pouvez.
Schéma De Base De Données
Ci-dessous est un exemple simplifié de ce que cela peut donner au niveau base de données.
Vous pouvez également diviser le panier de table en plusieurs tables afin que vous puissiez suivre les révisions à la charrette.
Sessions
Normal Sessions PHP sont constitués de deux parties
Par conséquent, il n'est pas
$_SESSION
vs$_COOKIE
- c'est$_SESSION
+$_COOKIE
= "session". Cependant, il ya des façons que vous pouvez modifier cela en utilisant un seul cookie crypté qui contient les données (et, par conséquent, vous n'avez pas besoin d'un identificateur pour trouver les données). Une autre approche commune est de stocker les données dans memcached ou une base de données au lieu du système de fichiers afin que plusieurs serveurs peuvent accéder.Ce que @Travesty3 dit, c'est que vous pouvez avoir deux cookies - un pour la session, et un autre qui est soit une "rester connecté" cookie (qui n'existe plus que le cookie de session), ou une copie des données à l'intérieur de séparer cookie.
$_SESSION
nécessite un appariement$_COOKIE
aussi, cela n'a pas beaucoup d'importance. J'utilise cryptés cookies pour la plupart de mes trucs et ignorer le fichier/base de données/memcached$_SESSION
wrappers puisqu'il n'est rien de plus que quelques petits points de données dans mes cookies comme le user_id.Je voudrais stocker dans une SESSION. Ma liste est assez longue, et j'ai peur qu'il ne rentre pas dans les 4K de stockage d'un COOKIE peut occuper. Il vous oblige à mettre la session de temps pour une plus longue période.
nota: dans certains pays (comme les pays-bas, où je suis) qui ont des politiques très strictes sur les cookies, et vous pouvez être contraint par la loi, d'utiliser les Sessions.
Comme l'a souligné Xeoncross, il est très important de stocker toutes les informations possibles pour l'analyse. Ainsi on ne devrait pas s'en remettre entièrement sur les sessions et les cookies.
Une approche possible est-
Des sessions d'utilisation si pas connecté
Si l'utilisateur n'est pas connecté, vous pouvez stocker et de récupérer le panier d'éléments de la liste et des articles de session à l'aide de
$_SESSION
en PHPUtilisation de la base de données lorsque vous êtes connecté
Si l'utilisateur est connecté, alors vous pouvez envisager l'une des deux options -
Lorsque l'utilisateur se connecte au
Lorsque l'utilisateur se connecte, obtenir tous les articles de charrette de la liste et des éléments de la session et de le stocker dans la base de données.
Cela permettra de rendre les données persistantes, même si l'utilisateur se déconnecte ou des changements de la machine, mais jusqu'à l'utilisateur n'est pas connecté, il n'y a aucun moyen de stocker les informations de manière permanente afin de ne pas être persistant.
Obtenir les données requises
Chaque fois que vous essayez d'accéder à panier ou d'une liste de souhaits ne cocher suivantes -
Vous pourriez envisager d'utiliser les deux.
L'inconvénient avec
$_SESSION
est que la session est désactivée lorsque le navigateur est fermé.Des sessions d'utilisation, mais de tenter de remplir le $_SESSION de données à partir d'un cookie, si elle est disponible.
Quelques points pour vous aider:
Cookies:
Session:
Je serais personnellement aller avec les sessions, depuis que je suis en supposant que d'être un petit/meddium auddience page. Si elle se développe, vous serait mieux avec une simple structure DB pour stocker ces données, avec un plan de maintenance pour obtenir de la crête de données inutiles (par exemple: les clients qui choisissent de certains produits, mais ne pas faire le checkout).
Je voudrais utiliser une session. Si un utilisateur a désactivé les cookies, puis la session ne sera pas en mesure de commencer à l'ID de session est stocké sur l'ordinateur de l'utilisateur dans un cookie.
Il y a quelques paramètres que vous pouvez regarder dans l'ordre pour tenter de garder les sessions pour plus.
Empêcher le cookie de session à être supprimé lorsque l'utilisateur ferme son navigateur en cours d'exécution
session_set_cookie_params()
avec lelifetime
jeu de paramètres. Cette fonction doit s'exécuter avantsession_start()
Vous pouvez également étendre la façon dont souvent les séances sont effacés du serveur en modifiant la session de collecte des ordures paramètres
session.gc_probability, de la session.gc_divisor, de la session.gc_maxlifetime
soit en php.ini ou à l'aide deini_set()
Si vous avez d'autres sites web en cours d'exécution sur le serveur et de les modifier au-dessus de la collecte des ordures réglages, vous devez les mettre en php.ini de sorte qu'ils s'appliquent à tous les sites web, ou si vous utilisez
ini_set()
, alors vous pourriez aussi regarder l'enregistrement de ces séances dans un répertoire différent que d'autres sites web en modifiantsession_save_path()
. Encore une fois c'est exécutée avantsession_start()
. Cela permettra d'éviter la collecte des ordures des autres sites de compensation de vos longues sessions d'un site particulier.Je voudrais également vous recommandons de définir la suite des paramètres de session en php.ini
session.entropy_file = /dev/urandom, session.entropy_length = 256, session.hash_function = sha512
. Cela devrait vous donner un cryptage fort de l'ID de session avec une toute petite chance de collisions.Et assurez-vous que vous avez un certificat SSL sur votre site pour empêcher l'homme dans le milieu des attaques contre votre ID de session.
Évidemment un utilisateur peut toujours décider d'effacer manuellement tous leurs cookies qui prendra le cookie de session avec elle, mais c'est un risque que je serais prêt à prendre. Si j'étais à mi-chemin par le biais d'un système de panier et n'avais pas vérifié, je n'irais pas et effacer mes cookies. Je pense toujours que les sessions sont mieux que la simple utilisation de cookies.
Les données est assez sûr, tant que vous êtes le seul site internet qui a accès à vos séances de répertoire et de l'IDENTIFIANT de session est forte. Et en étendant le serveur de la session de la durée de stockage de vos données peuvent persister sur le serveur.
Il y a d'autres mesures que vous pourriez utiliser pour faire vos séances encore plus fort. Régénérer votre ID de session toutes les 20 minutes, la copie de données. Également enregistrer des Identifiants de session à l'encontre des adresses IP dans une base de données et vérifier pour voir si une adresse IP en particulier les tentatives d'envoi de plus de X le numéro de l'Id de session dans un temps donné, pour éviter que quelqu'un essaie de la force brute d'un ID de session.
Vous pouvez également stocker les données dans une base de données liée par l'ID de session, au lieu d'un fichier de session sur le serveur. Cependant, c'est toujours tributaire d'un IDENTIFIANT de session qui est stocké dans un cookie, et pourrait disparaître à tout moment. La seule façon d'être vraiment sûr qu'un utilisateur de ne pas perdre leur panier en leur demandant de se connecter en premier et le stockage dans une base de données.