Vous auriez besoin de stocker l'adresse IP et les horodatages côté serveur. Il est peu probable qu'un bot envoie des cookies, et même une session basée sur une URL n'est pas fiable.
Le surdébit d'un fichier ne devrait pas être trop élevé, à moins que vous ne fassiez que la journalisation à plat qui vous tue. Vous pouvez utiliser SQLite ou similaire, peut-être stocké sur un système de fichiers basé sur la mémoire pour un petit coup de pouce de vitesse. Ou vous pourriez aller avec quelque chose comme memcached. Si vous avez besoin de conserver les données, utilisez MySQL. L'overhead d'une base de données complète n'est pratiquement rien comparé au temps qu'il faut à PHP pour faire à peu près n'importe quoi.
Si vous voulez vraiment faire quelque chose comme ceci avec des sessions, affichez une page d'accord d'utilisateur à moins qu'une variable "I Agree" ne soit définie dans la session. De cette façon, si un bot n'envoie pas une session valide, tout ce qu'il obtient est l'accord de l'utilisateur. Si c'est le cas, vous pouvez le suivre avec des variables de session. Gardez à l'esprit que la solution basée sur la session n'est pas nécessaire car vous n'avez pas besoin de mémoriser l'état du client entre les requêtes et que les sessions entraînent autant, sinon plus, de surcoût que la plupart des alternatives personnalisées.
En ce qui concerne l'affirmation que les variables de session peuvent être manipulées par les cookies, ce n'est pas tout à fait vrai. Cependant, si vous êtes assez stupide pour laisser register_globals
et que vous demandez une variable globale, je ne voudrais pas risquer de deviner si elle provient d'une session, d'un cookie, d'une chaîne de requête, de l'environnement ou si elle était précédemment indéfini. Tout cela est discutable si vous accédez explicitement à $ _SESSION bien sûr.
Il se peut que je manque quelque chose, mais la signification de votre titre m'échappe. –