Używam łańcucha base64 bezpiecznego dla adresu URL. Poniżej przedstawiono kod w języku Python, który wykonuje to: *.
Ostatni wiersz usuwa znak "=" lub "==", który oznacza, że kodowanie w podstawie podstawowej 64 powoduje umieszczanie znaków w adresie URL trudniejszym i jest niezbędny tylko do dekodowania informacji, które nie trzeba tutaj robić.
import base64
import uuid
# get a UUID - URL safe, Base64
def get_a_Uuid():
r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes)
return r_uuid.replace('=', '')
* Ten robi przestrzegać norm: base64.urlsafe_b64encode
następująco RFC 3548 i 4648 zobacz https://docs.python.org/2/library/base64.html. Usuwanie kodu ==
z danych kodowanych base64 o znanej długości jest dozwolone, patrz RFC 4648 §3.2. Identyfikator UUID/GUID jest określony w RFC 4122; §4.1 Format stwierdza "Format UUID to 16 oktetów". Propozycja base64
koduje te 16 oktetów.
Znaki międzynarodowe to wciąż trochę puszki z robakami; może działać zawsze w przeglądarce, ale jeśli wklejasz kopie w różnych aplikacjach, takich jak klient poczty, komunikator internetowy lub najzwyczajniejszy przypadek, SMS-y, ulegną uszkodzeniu. Base64, jak sugerują odpowiedzi, jest nadal najlepszym rozwiązaniem, chyba że podejmiesz niebezpieczne założenie, że użytkownicy nie będą używać tych linków poza tą samą przeglądarką. – Ekevoo