close - requests python sessions
Identificación de sesión única en python (5)
¿Cómo puedo generar una identificación de sesión única en Python?
¿Para qué es la sesión? Una aplicación web? Quizás quieras mirar el módulo del vaso de precipitados . Es el módulo predeterminado para manejar sesiones en Pylons.
Puede ser tan simple como crear un número aleatorio. Por supuesto, tendría que almacenar sus ID de sesión en una base de datos o algo así y verificar cada uno que genere para asegurarse de que no sea un duplicado, pero las probabilidades son que nunca lo serán si los números son lo suficientemente grandes.
Puede usar la biblioteca uuid de la siguiente manera:
import uuid my_id = uuid.uuid1() # or uuid.uuid4()
ACTUALIZACIÓN: 2016-12-21
Mucho ha sucedido en los últimos ~ 5 años. /dev/urandom
se ha actualizado y ahora se considera una fuente de aleatoriedad de alta entropía en kernels y distribuciones Linux modernos. En los últimos 6mo hemos visto la inanición de la entropía en un kernel Linux 3.19 usando Ubuntu, así que no creo que este problema esté "resuelto", pero es suficientemente difícil terminar con aleatoriedad de baja entropía cuando se pregunta por cualquier cantidad de aleatoriedad. del sistema operativo.
Odio decir esto, pero ninguna de las otras soluciones publicadas aquí es correcta con respecto a ser una "identificación de sesión segura".
# pip install M2Crypto
import base64, M2Crypto
def generate_session_id(num_bytes = 16):
return base64.b64encode(M2Crypto.m2.rand_bytes(num_bytes))
Ni uuid()
ni os.urandom()
son buenas opciones para generar ID de sesión. Ambos pueden generar resultados aleatorios , pero al azar no significa que sea seguro debido a una entropía pobre. Consulte " Cómo crackear un generador congruente lineal " a través de los recursos de Haldir o NIST en Generación de números aleatorios . Si aún desea usar un UUID, utilice un UUID que se generó con un buen número inicial aleatorio:
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 es la mejor API de OpenSSL en Python atm, ya que pyOpenSSL parece mantenerse solo para admitir aplicaciones heredadas.
import os, base64
def generate_session():
return base64.b64encode(os.urandom(16))