django的会话(session)中间件不提供类似j2ee和php中基于url重写的会话机制。
引用
Session IDs in URLs
The Django sessions framework is entirely, and solely, cookie-based. It does not fall back to putting session IDs in URLs as a last resort, as PHP does. This is an intentional design decision. Not only does that behavior make URLs ugly, it makes your site vulnerable to session-ID theft via the "Referer" header.
以下脚本通过中间件为django增添无cookie时的会话支持,在django1.0.2版本下工作正常, 注意,该中间件在setting模块MIDDLEWARE_CLASSES tuple中的位置必须优先于SessionMiddleware
#-*- coding:utf-8 -*-
from django.http import HttpResponseRedirect
import re,pdb
class CookielessSessionMiddleware(object):
def __init__(self):
self._re_links = re.compile(r'<a(?P<pre_href>[^>]*?)href=["\'](?P<in_href>[^"\']*?)(?P<anchor>#\S+)?["\'](?P<post_href>[^>]*?)>', re.I)
self._re_forms = re.compile('</form>', re.I)
def _prepare_url(self, url):
patt = None
if url.find('?') == -1:
patt = '%s?'
else:
patt = '%s&'
return patt % (url,)
def process_request(self, request):
if not request.COOKIES.has_key('sessionid'):
value = None
if hasattr(request, 'POST') and request.POST.has_key('sessionid'):
value = request.POST['sessionid']
elif hasattr(request, 'GET') and request.GET.has_key('sessionid'):
value = request.GET['sessionid']
if value:
request.COOKIES['sessionid'] = value
def process_response(self, request, response):
if not request.path.startswith("/admin") and response.cookies.has_key('sessionid'):
try:
sessionid = response.cookies['sessionid'].coded_value
if type(response) is HttpResponseRedirect:
if not sessionid: sessionid = ""
redirect_url = [x[1] for x in response.items() if x[0] == "Location"][0]
redirect_url = self._prepare_url(redirect_url)
return HttpResponseRedirect('%ssessionid=%s' % (redirect_url,sessionid,))
def new_url(m):
anchor_value = ""
if m.groupdict().get("anchor"): anchor_value = m.groupdict().get("anchor")
return_str = '<a%shref="%ssessionid=%s%s"%s>' % \
(m.groupdict()['pre_href'],
self._prepare_url(m.groupdict()['in_href']),
sessionid,
anchor_value,
m.groupdict()['post_href'])
return return_str
response.content = self._re_links.sub(new_url, response.content)
repl_form = '<div><input type="hidden" name="sessionid" value="%s" /></div>' + \
'</form>'
repl_form = repl_form % (sessionid,)
response.content = self._re_forms.sub(repl_form, response.content)
return response
except:
return response
else:
return response
分享到:
- 2009-06-01 20:10
- 浏览 1285
- 评论(1)
- 论坛回复 / 浏览 (1 / 3333)
- 查看更多
相关推荐
在本文中,我们将深入探讨如何使用Django框架来实现用户登录和注册功能,这对于任何Web应用程序来说都是核心组件。Django是一个用Python编写的高级Web框架,它鼓励快速开发和简洁实用的设计理念。 首先,我们需要...
在Web开发中,Django框架提供了方便的cookie和session管理机制,用于解决HTTP协议无状态的问题。HTTP协议本身不支持会话跟踪,因此需要借助额外的技术,如cookie和session,来实现用户状态的维护。 一、HTTP协议无...
python 零基础学习篇
除了基本的登录功能,Django还支持记住我(Remember Me)功能,通过在cookie中存储一个长期有效的令牌,使用户在关闭浏览器后再次访问时仍能保持登录状态。还可以实现注册功能,允许新用户创建账户,并添加自定义的...
Token是一种手动实现的会话管理机制,通常用于实现无状态的服务端验证。它可以作为一种替代方案来增强安全性。 **特点:** - **唯一性:** 每个Token都应该具有唯一性。 - **生成方式:** 通常通过组合多种因素(如...
本篇文章将详细阐述如何在Django中实现会话控制,主要包括页面跳转、Cookie管理以及Session的使用。 首先,页面跳转在Web开发中是常见的操作。在Django中,可以使用`redirect()`函数进行本地或外部网址的跳转。例如...
在Django框架中,有两种主要方法可以实现这一功能:Django Session和Cookie。理解这两者的工作原理和如何在Django中使用它们至关重要。 首先,让我们深入了解Cookie。Cookie是由服务器发送到用户浏览器的一小段数据...
通过这些操作,可以有效地使用Django框架中的cookie和session来跟踪用户的会话状态,并在此基础上进行相应的业务逻辑处理。在实际开发中,为了保证安全,开发者应当遵循最佳实践,比如设置合理的过期时间,使用...
`django-user-sessions`库就是为了解决这个问题而设计的,它通过添加一个外键将Django会话与用户模型连接起来,使得我们可以方便地枚举和管理所有用户的会话。 首先,让我们深入了解Django的默认会话机制。Django...
cookie通常用于实现会话管理、用户偏好设置等功能,但其存储容量有限且安全性相对较低。 5. **权限管理**: Django提供了一套强大的权限和认证系统,包括用户模型、组和权限。可以使用`@login_required`装饰器限制...
同时,可以使用Django的内置session和cookie管理来安全地处理用户认证和会话信息。 6. **随机图片验证码**: Django可以集成第三方库如django-simple-captcha来生成和验证随机图片验证码,防止机器人自动提交表单...
默认情况下,Django使用cookie来存储会话ID,然后在服务器端根据这个ID查找并恢复会话数据。 对于登录页面的错误处理,比如输入验证和防止跨站请求伪造(CSRF),Django也提供了内置支持。你可以通过在表单中添加`{...
1. **Django会话管理**:Django原生支持会话管理,可以通过设置`SESSION_ENGINE`配置项来选择不同的会话后端。默认使用的是基于Cookie的会话,但也可以选择其他数据库,如Redis。 2. **Redis作为会话存储**:Redis...
8. **权限管理**:如果用户通过人脸识别登录成功,使用Django的内置认证系统进行用户会话管理,设置cookie以保持登录状态。 9. **测试与优化**:进行功能测试,确保人脸识别准确无误,同时优化性能,如调整人脸检测...
Django支持cookie和session两种方式来实现会话管理。 【安全与认证】 Django内置了强大的安全功能,包括CSRF(跨站请求伪造)保护和session tokens。CSRF保护通过验证请求中的特定token来防止恶意操作。同时,...
总的来说,Django中的Cookie和Session都是为了在HTTP无状态环境下维护用户状态。Cookie主要存储轻量级信息,如会话标识符,而Session用于存储更复杂的数据并在服务器端保持状态。两者结合使用,可以提供安全、高效的...
1. **Django认证系统**:Django自带的认证系统包括用户模型、会话管理、权限和组等。开发者创建了`manager`和`member`两个用户模型,扩展了Django的默认用户模型`AbstractBaseUser`或`User`,以存储额外的字段,如...
目录网盘文件永久链接 1.Python3.5 DjangoWeb开发框架 ...5.Python3,5 Django会话与表单验证21课rar 6,Python3.5项目架构与设计13课rar 7.Python3.5ajax与编辑器扩展插件18课,rar 8.Python3.5博客系统开发演练14课rar
但是,你说你每次上网的时候,只需要登录一下就行了,并没有我说的让你每次都登录,这是会话路径技术帮你记录了你的登录信息,现在我们们就来讲讲Django的会话路径技术cookie和session,实现会话追踪。 二、cookie ...