Come si genera un ID di sessione univoco in Python?ID sessione univoco in python
risposta
È possibile utilizzare il uuid library in questo modo:
import uuid my_id = uuid.uuid1() # or uuid.uuid4()
Può essere semplice come la creazione di un numero casuale. Ovviamente, dovresti memorizzare gli ID di sessione in un database o qualcosa di simile e controllare ognuno di quelli generati per assicurarti che non sia un duplicato, ma le probabilità sono che non lo saranno mai se i numeri sono abbastanza grandi.
Esattamente, da qui la mia soluzione: http://stackoverflow.com/questions/817882/unique-session-id-in-python/818040#818040 –
import os, base64
def generate_session():
return base64.b64encode(os.urandom(16))
perché il downmod? –
I duno, ma questa sembra essere una soluzione valida. Tuttavia, ti consigliamo di rimuovere il "/ =" finale e di includere anche un timestamp per minori possibilità di collisione. – Unknown
La possibilità di una collisione dopo 4 miliardi di iterazioni è di 1 su 8 miliardi.Se voglio ridurre ulteriormente la possibilità di una collisione, posso semplicemente aumentare il numero di bit, cioè os.urandom (32). E non capisco cosa dovrebbe portare a spogliarsi del trailing "==". –
A cosa serve la sessione? Un'app web? Potresti voler dare un'occhiata a the beaker module. È il modulo predefinito per la gestione delle sessioni in Pylon.
UPDATE: 2016-12-21
Molto è accaduto in una delle ultime ~ 5yrs. /dev/urandom
è stato aggiornato ed è ora considerato una fonte di casualità ad alta entropia sui moderni kernel e sulle distribuzioni Linux. Negli ultimi 6mo abbiamo visto entropy starvation su un kernel Linux 3.19 usando Ubuntu, quindi non penso che questo problema sia "risolto", ma è abbastanza difficile finire con casualità a bassa entropia quando si richiede una quantità qualsiasi di casualità dal sistema operativo.
Odio dire questo, ma nessuna delle altre soluzioni pubblicati qui sono corrette con riferimento alla fase di "ID sessione sicura."
# pip install M2Crypto
import base64, M2Crypto
def generate_session_id(num_bytes = 16):
return base64.b64encode(M2Crypto.m2.rand_bytes(num_bytes))
Né uuid()
o os.urandom()
sono buone scelte per la generazione di ID di sessione. Entrambi possono generare risultati casuali, ma casuale non significa che sia protetto a causa della scarsa entropia. Vedi "How to Crack a Linear Congruential Generator" di Haldir o NIST's resources on Random Number Generation. Se si vuole ancora utilizzare un UUID, quindi utilizzare un UUID che è stato generato con un buon numero casuale iniziale:
import uuid, M2Crypto
uuid.UUID(bytes = M2Crypto.m2.rand_bytes(num_bytes)))
# UUID('5e85edc4-7078-d214-e773-f8caae16fe6c')
o:
# pip install pyOpenSSL
import uuid, OpenSSL
uuid.UUID(bytes = OpenSSL.rand.bytes(16))
# UUID('c9bf635f-b0cc-d278-a2c5-01eaae654461')
M2Crypto è meglio API OpenSSL in Python atm come appare pyOpenSSL da mantenere solo per supportare applicazioni legacy.
Queste citazioni relative ai problemi UUID sono utili. Grazie per aver postato questo. Domanda: quale pensi sia il modo migliore per generare un ID di sessione? In particolare con i difetti citati nelle implementazioni UUID, come lo faresti in modo diverso? Sto scrivendo qualcosa di simile ora e sto cercando di trovare l'approccio migliore. Inoltre, deve essere tollerante ai guasti, ad esempio non può dipendere dalla connessione a un server di database. – ratsbane
Qualsiasi degli esempi sopra funzionerebbe. La chiave sta facendo uso di un buon generatore di numeri casuali popolato con "entropia crittograficamente sufficiente". Oltre all'estetica e alla dimensione della rappresentazione, non c'è differenza tra una codifica un valore sufficientemente casuale come una stringa 'Base64' o un' UUID', o anche una stringa con codifica esadecimale. A ognuno il suo. Personalmente preferisco base64 per motivi di dimensioni. – Sean
Grazie. Sembra sano. L'ho scritto questo pomeriggio con – ratsbane
- 1. ID univoco su NSViews
- 2. ID browser univoco JavaScript
- 3. Come posso generare un ID univoco in Python?
- 4. Genera ID univoco
- 5. ID univoco Android
- 6. Tag NFC ID univoco
- 7. Asp.Net MVC ID univoco per richiesta
- 8. Cassandra: genera un ID univoco?
- 9. ID univoco di un'attività Android
- 10. ID univoco con il tempo()
- 11. ID univoco protetto da crittografia
- 12. ID hardware univoco in Mac OS X
- 13. Creare un ID univoco globale in JavaScript
- 14. log4net richiesta ID univoco in ASP.NET
- 15. Come generare ID univoco in Java (intero)?
- 16. Come generare un ID univoco in Dart
- 17. Lunghezza ID sessione in Tomcat
- 18. ID sessione di rigenerazione
- 19. id di sessione cookie nel GWT RPC
- 20. httpservletrequest - crea nuova sessione/modifica sessione Id
- 21. Genera ID univoco da stringa alfanumerica
- 22. Dispositivo Android UDID o ID univoco?
- 23. Java: ID univoco di 10 cifre
- 24. java ottiene ID server univoco per riferimento
- 25. creare un ID univoco del visitatore?
- 26. Come assegnare un ID elemento DOM univoco
- 27. Hardware univoco ID computer basato su Java
- 28. Mantenimento ID utente Facebook in sessione
- 29. Assegnare ID univoco alla lista delle liste in Python in cui i duplicati ottenere lo stesso id
- 30. Flask - Come ottenere ID sessione
Questo è quello che stavo cercando! – Alex
Ma non è molto casuale. – Gumbo
@ Gumbo: si prega di elaborare? – saffsd