2009-12-02 6 views
0

Pour l'instant, j'utilise l'incrément automatique pour identifier les ressources de mon site Web.Incrémentation automatique avec une chaîne de chiffres et de lettres

Le problème est que je ne veux pas que les utilisateurs sachent combien de ressources il y a. Comment pourrais-je utiliser à la place une sorte de combinaison "aléatoire" structurée de lettres et de chiffres (disons 6 chiffres) que je pourrais utiliser à la place de (ou en plus) des numéros de clés primaires auto-incrémentés.

Fondamentalement, je veux les utilisateurs de voir

website.com/page.php?4jnd32 

au lieu de

website.com/page.php?13 

Je ne sais même pas ce que cette pratique est appelée ce qui entrave ma capacité à rechercher une réponse

Répondre

1

Si vous voulez vraiment cela, créez un nouveau champ (par exemple: fake_id) puis utilisez la fonction uniqid de php.

+0

+1. Certainement un moyen simple de faire les choses, et raisonnablement sécurisé, à cela. –

0

Vous pourriez utiliser un GUID bien que ce soit sensiblement plus long que "4jnd32". Un guid est un identificateur global unique. Cela permettrait d'identifier les pages de manière unique, mais cela ne donnerait à l'utilisateur aucune idée du nombre de pages disponibles ou donnerait un ordre à la page.

Je ne suis pas un expert en PHP, mais une recherche rapide semble indiquer que PHP a une fonction pour générer GUIDs.

0

MySQL prend en charge UUIDs. Mais vous aurez besoin d'utiliser un déclencheur pour que cela fonctionne automatiquement.

CREATE TABLE `tester` (
    `tester_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 
    `uuid` VARCHAR(64), 
    `foo` VARCHAR(45), 
    PRIMARY KEY (`tester_id`), 
    INDEX `index_uuid`(`uuid`) 
) 
ENGINE = InnoDB; 

delimiter | 
CREATE TRIGGER tester_uuid BEFORE INSERT ON `tester` 
FOR EACH ROW BEGIN 
    SET NEW.uuid = UUID(); 
END; 
| 
delimiter; 

INSERT INTO tester (foo) VALUES('bar'), ('baz'); 

SELECT * FROM tester; 
Questions connexes