我有一个用PHP编写的站点,正在使用Python和Django添加新特性。其中一部分是使用标准的Django身份验证出资人授权包裹。在
一旦有人使用我们的Django设置登录,当他们来到PHP端时,我需要看到他们已经登录并使用数据库中的用户信息)。在
使用这个Django sessionid cookie值从PHP获取用户id并证明Django会话id有效的最佳方法是什么?在
我的计划是在登录时对Django会话id、Django密钥和用户id进行散列。该值将被设置为附加cookie。然后在PHP中,我将提取用户id,对其和密钥加上Django sessionid cookie值进行哈希,并比较它们是否匹配。在
我扩展了auth login视图,以便在成功验证用户后设置额外的cookie。而不是HttpResponseRedirect,它将返回HttpResponseSetAuthCookieAndRedirect。在
httpresponsesetauthCookie和direct获取请求.session.session_id用户的用户名作为参数。在class HttpResponseSetAuthCookieAndRedirect(HttpResponse):
""" a cookie enhanced version of HttpResponseRedirect """
status_code = 302
def __init__(self, user_id, session_id, redirect_to):
HttpResponse.__init__(self)
self['Location'] = iri_to_uri(redirect_to)
my_hash=hashlib.sha512('{0}|-|{1}|-|{2}'.format(settings.SECRET_KEY,user_id,session_id)).hexdigest()
cookie_hash="{0}::{1}".format(user_id,my_hash[:64])
self.set_cookie('check', value=cookie_hash, max_age=172800, path='/', domain=None)
这将设置一个cookie,它是会话id、我的Django密钥和与会话id匹配的已验证用户id的哈希值
在PHP中
^{pr2}$
到目前为止,这是有效的。在
这个主意靠谱吗?在