2009-06-30 8 views
2

Je veux être en mesure de générer des variables d'URL comme ceci:Comment générer des variables d'URL uniques qui correspondent à un enregistrement db?

http://example.com/195yq 
http://example.com/195yp 
http://example.com/195yg 
http://example.com/195yf 

Les variables correspondront à un jeu d'enregistrements MySQL afin que je puisse le retirer. Au moment de la création de cet ensemble d'enregistrements, je souhaite créer cette clé pour cela.

Comment est-ce que je peux faire ceci? Quelle est la meilleure façon de procéder? Y a-t-il des classes existantes que je peux utiliser?

Merci à tous

+0

Vous dites "Au moment de la création de cet ensemble d'enregistrements, je souhaite créer cette clé pour cela.". Où voulez-vous réellement créer cette URL? DB ou une couche supérieure? – alphadogg

Répondre

0

Fondamentalement, vous avez besoin d'une fonction de hachage quelconque.

Cela peut être une fonction SHA-1, une fonction MD5 (comme altCogito), ou l'utilisation d'autres données que vous avez dans l'enregistrement et l'encodage.

Combien de documents pensez-vous avoir? Veillez à sélectionner la solution car une fonction de hachage doit être assez grande pour vous couvrir correctement, mais trop grande et vous créez une base de données plus grande que nécessaire. J'ai utilisé SHA-1 et tronqué à 64 ou 32 bits, selon le besoin.

Regardez également REST. Considérez que l'URL n'a pas besoin d'être si mystérieuse ...

+0

J'espère que les records seront dans les millions à tout le moins. Optimiste, oui. :) Je préfère montrer cette variable unique aux utilisateurs plutôt que mon identifiant auto-incrémentation principal, non parce que je cache du contenu mais parce que je ne veux pas que ce soit trop long. – Abs

+1

Je suis d'accord que parfois les URL sont de longues affaires. Mais, il y a quelque chose à dire pour une URL lisible par l'homme qui vous indique quelle ressource vous allez obtenir. La plupart des gens ne saisissent pas d'URL, mais utilisent plutôt des liens ou utilisent Google. Je ne me souviens pas de la dernière fois où j'ai tapé une URL complète où j'aurais aimé que quelqu'un m'ait donné un TinyURL ... – alphadogg

+0

Hmm, Bon point, je ne peux vraiment pas l'imaginer aussi. – Abs

0

Cela peut être fait assez simple dans deux façons:

  • Utilisez un hachage, comme MD5. (Serait long)
  • Base-64 encode un ID particulier ou un morceau de données

Si vous demandez si oui ou non il y a quelque chose qui fait cela déjà avec les dossiers MySQL, je ne suis pas sûr que vous » Les données sont très éloignées des URL de votre site web, même dans des frameworks comme Grails. La plupart n'essaient même pas de regrouper les fonctionnalités front-end et d'accès aux données en une seule pièce.

+0

Base-64 est longue elle-même. 4 caractères se transforment en 8, non? – Abs

+0

Vrai, très vrai :) – cgp

0

Dans quel contexte allez-vous utiliser ceci? Pourquoi ne pas simplement passer des variables post? C'est beaucoup plus sûr et soigné. Vous pourrez toujours accomplir le nombre dans l'URL comme id = 195yq, et il y a un moyen de les cacher en configurant votre fichier php.ini.

J'espère que cela peut vous être utile.

Veuillez garder cela à l'esprit. Lorsque vous transmettez des variables dans la barre d'adresse, il est facile pour quelqu'un de modifier la variable et d'accéder aux informations auxquelles vous ne voulez pas qu'elles accèdent.

+0

Ces URL peuvent être utilisées par n'importe qui pour trouver une page particulière sur mon site. Il y aura beaucoup de pages et le contenu sera généré par l'utilisateur. Il doit être aussi court que possible. – Abs

+0

Je comprends. Désolé, je ne peux pas vous aider. Bonne chance cependant, ce sera très utile pour moi aussi, donc je vais regarder. +1 pour une bonne question! –

0

Dans les exemples que vous avez donnés, il semblerait que vous utilisiez la base 64 pour encoder la clé primaire numérique. C'est comme ça que je le ferais et que je l'ai fait par le passé, mais je ne suis pas sûr que ce soit mieux que de passer l'ID en clair parce que le décodage en base 64 est trivial.

+0

Voulez-vous dire l'utilisation de base64_encode ou autre chose? Comme cela se traduira par une variable avec beaucoup de caractères. Je ne suis pas sûr à quel point cela peut être unique non plus? – Abs

+0

Oui, j'ai utilisé la fonction base64_encode(). Ma base de données se développe très lentement, donc l'identifiant codé n'est pas encore très long. – Scott

Questions connexes