17. november 2006 - 14:46
Der er
21 kommentarer og 1 løsning
md5 laver for lang kode
Når en bruger har oprettet sig får han tilsendt en email med et valideringslink. der er bare det problem, at i nogle mailprogrammer kan linket blive for langt så det vises på flere linier. fx i jubiimail hvor nedenstående ikke virker. Hvis man fx istedet kopiere linket fra jubiimail og sætter det ind i adresselinien på browseren får man ingen gang det hele med.. meget mystisk
http://www.blabla.dk/members/validate.php?key=64d635ad653785559b 205cf166ae0823
den unikke kode bliver lavet med $uniqueId = md5(uniqid....
Kan man tvinge md5 til at generere et nr. som er kortere end 32 tegn?
Eller hvad gør jeg?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
17. november 2006 - 14:56
#1
Det går galt lige så snart at et mailprogram tvinger linket vist på to linier..
17. november 2006 - 15:03
#2
substr($var, 0, 30) den kode viser kun de første 30 tegn i variablen $var
17. november 2006 - 15:06
#3
det første cifre efter variablen viser hvor den skal starte med at læse variablen og det sidste cifre står for hvor mange tegn den skal læse. altså vil koden forneden vise "cde" fra variablen "abcdefg" substr($var, 2, 3)
17. november 2006 - 15:07
#4
17. november 2006 - 15:12
#5
hmortensen - det ville give problemer hos dem der ikke tillader html i deres mail.
17. november 2006 - 15:14
#6
Ja, og cookies giver problemer ved login, og javascript giver problemer ved menuer. Man kan ikke leve i det forrige århundrede altid.
17. november 2006 - 15:15
#7
Den nørdede variant er selvfølgelig at dekode hex-decimal strengen til en håndfyld bytes og derefter kode dem til base32 eller base64 - begge dele vil fylde væsentligt færre chars, men beholde den samme grad af "uniqueness". Eftersom jeg intet kender til PHP er jeg desværre ikke i stand til at give dig nogle anvisninger/kodeeksempler på ovenstående, men det burde da kunne lade sig gøre :)
17. november 2006 - 15:16
#8
Hej igen.. jeg har fået det til at virke ved at fjerne md5 så det ser således ud: $uniqueId = (uniqid($username)); Er det ok? nu laver den bare en værdi på 12 tegn.
17. november 2006 - 15:19
#9
15:16:53 -> kom med hele koden der skaber variablen tak :)
17. november 2006 - 15:26
#10
<?PHP require_once('common.php'); $password = sanitize_variable($_REQUEST['password']); $password1 = sanitize_variable($_REQUEST['password1']); if(!isset($_REQUEST['submit'])) { /* show the signup form */ require("signup.txt"); } else { if($password != $password1) { echo " <script type=\"text/javascript\"> alert(\"Adgangskoder matcher ikke!\"); </script>"; require("signup.txt"); } else { if(!is_valid_username()) { echo " <script type=\"text/javascript\"> alert(\"Indtast venligst i alle felter!\"); </script>"; require("signup.txt"); } else if(!is_valid_addr()) { echo " <script type=\"text/javascript\"> alert(\"Den indtastede e-mail adresse er ikke gyldig eller uacceptabel!\"); </script>"; require("signup.txt"); } else { if(is_valid_referer()) { /* * everything has worked out let's create that account. */ require ("../inc/config.php"); $username = sanitize_variable($_REQUEST['username']); $userStatus = ($validate_email == 0) ? 1 : 0; $query = "insert into users SET userName = '$username', userPassword = password('$password'), userStatus =$userStatus"; mysql_query($query,$con); if(mysql_errno() == 0) { $uniqueId = (uniqid($username)); $email = sanitize_variable($_REQUEST['email']); $firstname = sanitize_variable($_REQUEST['firstname']); $lastname = sanitize_variable($_REQUEST['lastname']); $userid = mysql_insert_id(); $ip = sanitize_variable($_SERVER['REMOTE_ADDR']); /* * create the profile */ $query = "insert into userProfile SET userId = $userid, userFirstName = '$firstname', userLastName= '$lastname', userEmail = '$email', userValidationKey = '$uniqueId', userIP = '$ip', userSignUp = now()"; mysql_query($query,$con); //echo mysql_error(); if(mysql_errno() == 0) { require("thanks.txt"); $f = join("",file("welcome-email.txt")); /* generate formatted message */ if($validate_email) { $link = "$site_url" ."members/validate.php?key=$uniqueId"; $message = sprintf($f,"$firstname $lastName",$link,$site_url); mail($email,"$site_name medlemskab bekræftelse",$message,"From: $member_service_email\n"); } else { if($welcome_email == 1) { $message = sprintf($f,"$firstname $lastName",$site_url); mail($email,"$site_name medlemskab bekræftelse",$message,"From: $member_service_email\n"); } } } else { //echo mysql_error(); echo " <script type=\"text/javascript\"> alert(\"Det valgte brugernavn er optaget!\"); </script>"; require("signup.txt"); } } else { //echo mysql_error(); echo " <script type=\"text/javascript\"> alert(\"Det valgte brugernavn er optaget!\"); </script>"; require("signup.txt"); } } else { echo " <script type=\"text/javascript\"> alert(\"Fejl. Du skal tillade cookies! Kan du ikke løse problemet, kontakt venligst webmaster@blabla.dk\"); </script>"; require("signup.txt"); } } } } ?>
17. november 2006 - 15:28
#11
før så følgende linie sådan ud: $uniqueId = md5(uniqid($username))
17. november 2006 - 15:28
#12
$uniqueId = md5($username); $uniqueId = substr($uniqueId, 0, 12);
17. november 2006 - 15:29
#13
Det er da også noget "#"#¤¤% at nogle emailprogrammer ikke kan håndtere en url som er lang..
17. november 2006 - 15:30
#14
vil du ikke venligst forklare hvad følgende præcis gør? $uniqueId = substr($uniqueId, 0, 12);
17. november 2006 - 15:30
#15
I mine aktiveringsmails. Der laver jeg en URL som du er igang med. Og samtidigt skriver jeg aktiveringskoden og brugerid - så det er muligt manuelt at aktivere sig.
17. november 2006 - 15:31
#16
$uniqueId = md5($username); //Laver md5 hash kode $uniqueId = substr($uniqueId, 0, 12); //Afkorter md5 hash koden til 12 tegn
17. november 2006 - 15:32
#17
vil det sige at de skal stå lige efter hinanden, eller skal den første skiftes ud med den nye?
17. november 2006 - 15:37
#18
Lige efter hinanden, og istedet for: $uniqueId = (uniqid($username));
17. november 2006 - 15:38
#19
og hvorfor har du fjernet(uniqid) - md5(uniqid($username));
17. november 2006 - 15:45
#20
Fordi jeg kan ikke lige se hvad du skal bruge det til?
17. november 2006 - 15:51
#21
ok.. takker mange gange.. det ladet til at funke nu :-) .. smider du ikke et svar labisama :-)
17. november 2006 - 15:54
#22
Det lyder godt :)
Vi tilbyder markedets bedste kurser inden for webudvikling