李迎辉 2009年08月30日 星期日 14:01 | 1258次浏览 | 1条评论
在处理登录时,我们会经常看到有remember me之类的登录功能。这个功能可以允许用户自已决定是否自动记录登录状态。在通常的session处理中,为了记录用户的session状态,一方面在后台对session中的数据有一个存储,另一方面通过cookie在前端存放一个session_id之类的东西,通过这个东西,当用户访问页面时,去查找是否有对应的session对象存在,如果有,则可以直接取出以前存储的信息,如果没有则表示用户没有访问过认证过。那么实现remember me的关键我认为是cookie信息的处理。
首先cookie的处理和session是不一样的。如果没有设置remember me,表示用户在关闭浏览器之后,cookie应该失效,但是在没有关闭浏览器的这段时间里,session信息还是要保存的。一旦用户设置了remember me,则cookie和session都要进行保存。因此需要有一个单独的信息来指示cookie的有效性。于是我修改了uliweb中的weto的session.py,在Session中增加了一个remember的属性。用户可以设置remember为True或False。如果设置了,则将会在session对象中增加一个键值,专门用来指示remember的状态。当没有设置时,缺省是为True的,也就是没有设置remember me时则认为永远remember me。
然后修改了middle_session.py,在process_response中添加了对request.session.remember的判断,用于设置不同的cookie的max_age的值。
这样在使用时,只要在需要处理remember me的地方,对request.session.remember设置用户上传的remember me的状态就可以了。session中间件会自动处理cookie。
这一点已经在uliweb-tests/users_test中实现了。如图:
Zeuux © 2024
京ICP备05028076号
回复 電波系山寨文化科学家 2009年08月31日 星期一 20:17