1*9c5db199SXin Li# Lint as: python2, python3 2*9c5db199SXin Lifrom __future__ import division 3*9c5db199SXin Lifrom __future__ import print_function 4*9c5db199SXin Liimport os, random 5*9c5db199SXin Li 6*9c5db199SXin Li 7*9c5db199SXin Lidef unique_id(cookie_key): 8*9c5db199SXin Li """ 9*9c5db199SXin Li Find out if remote caller has cookie set on the key. 10*9c5db199SXin Li If not, set cookie on client side: evaluate this key by a random string. 11*9c5db199SXin Li ( unique user identifier ) 12*9c5db199SXin Li In both scenarios return value of the cookie, be it old or newly set one 13*9c5db199SXin Li """ 14*9c5db199SXin Li uid = '' 15*9c5db199SXin Li ## try to retrieve uid from Cookie 16*9c5db199SXin Li if 'HTTP_COOKIE' in os.environ: 17*9c5db199SXin Li ## parse os.environ['HTTP_COOKIE'] 18*9c5db199SXin Li cookies = os.environ['HTTP_COOKIE'].split(';') 19*9c5db199SXin Li key = '%s=' % cookie_key 20*9c5db199SXin Li uid_cookies = [c for c in cookies if c.strip().startswith(key)] 21*9c5db199SXin Li 22*9c5db199SXin Li if uid_cookies: 23*9c5db199SXin Li assert(len(uid_cookies) == 1) 24*9c5db199SXin Li uid_cookie = uid_cookies[0] 25*9c5db199SXin Li uid = uid_cookie.replace(key, '') 26*9c5db199SXin Li 27*9c5db199SXin Li if not uid: 28*9c5db199SXin Li uid = str(random.random())[2:16] # random string of 14 digits 29*9c5db199SXin Li set_cookie_statement = 'Set-Cookie:%s=%s;' % (cookie_key, uid) 30*9c5db199SXin Li set_cookie_statement += 'expires=Thu, 26-Dec-2013 22:03:25 GMT;' 31*9c5db199SXin Li print(set_cookie_statement) 32*9c5db199SXin Li 33*9c5db199SXin Li return uid 34