Python中唯一的会话ID

我如何在Python中生成唯一的会话ID?

你可以像这样使用uuid库 :

导入uuid
 my_id = uuid.uuid1()#或uuid.uuid4()

更新:2016-12-21

在过去的五年里发生了很多事情。 /dev/urandom已被更新,现在被认为是现代Linux内核和发行版的高熵随机性来源。 在过去的6mo中,我们已经看到了使用Ubuntu的Linux 3.19内核熵匮乏,所以我不认为这个问题是“解决的”,但是当要求任意数量的随机性时,要达到低熵随机性是非常困难的从操作系统。


我讨厌这样说,但是这里发布的其他解决scheme在“安全会话ID”方面都是正确的。

 # pip install M2Crypto import base64, M2Crypto def generate_session_id(num_bytes = 16): return base64.b64encode(M2Crypto.m2.rand_bytes(num_bytes)) 

uuid()os.urandom()都不是生成会话ID的好select。 两者都可能产生随机结果,但随机并不意味着它是安全的,由于不良的 。 有关随机数生成的 Haldir或NIST资源,请参见“ 如何破解线性同余生成器 ”。 如果你仍然想使用UUID,那么使用用一个好的初始随机数生成的UUID:

 import uuid, M2Crypto uuid.UUID(bytes = M2Crypto.m2.rand_bytes(num_bytes))) # UUID('5e85edc4-7078-d214-e773-f8caae16fe6c') 

要么:

 # pip install pyOpenSSL import uuid, OpenSSL uuid.UUID(bytes = OpenSSL.rand.bytes(16)) # UUID('c9bf635f-b0cc-d278-a2c5-01eaae654461') 

M2Crypto是Python atm中最好的OpenSSL API,因为pyOpenSSL似乎只能用于支持传统应用程序。

 import os, base64 def generate_session(): return base64.b64encode(os.urandom(16)) 

它可以像创build一个随机数一样简单。 当然,你必须将你的会话ID存储在数据库中,并检查你生成的每一个,以确保它不是重复的,但是如果数字足够大的话,就不会有这个可能性。

这个会议是什么? 一个Web应用程序? 你可能想看烧杯模块 。 这是在Pylons中处理会话的默认模块。