`
guotie
  • 浏览: 20391 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

django session的问题

阅读更多
django中的session, 只能对所有人使用统一的超时机制。这对于用户来说,不是很好的选择,例如有些用户希望不保留session,而有些用户希望保留。

请教,在django中,如何实现根据用户的不同选择(保留/或者不保留)来保存session?
分享到:
评论
1 楼 jjx 2007-12-09  
你的要求最好用cookie来实现

不过基于django的开放性,也不是不可能实现,只是要改动的地方多些,下面提几个要点
1. django中的request.session是通过django.contrib.sessions.SessionMiddleware来完成的,request.session实际上并不是django.contrib.models.Session实例,而是settings.SESSION_ENGINE中指定模块的SessionStore实例,默认 的,就是django.contrib.sessions.backends.db.SessionStore
2. 将你的用户会话超时设置放在某个地方,比方说利用django user的profile机制存放session_timeout设置

3. 你要改动如下代码
①django.contrib.session.middleware中的将session写到cookie中的过程,你需要修改expires 参数到time.time+user.get_profile().session_timeout
②修改django.contrib.sessions.backends.db.SessionStore中的save方法
这里expire_date = datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)
中的seconds=settings.SESSION_COOKIE_AGE 要改成user.get_profile().session_timeout

修改这个方法的原因是django用expire_date__gt这个条件查找指定sesion_key的session

①中可以从request.user中取得user,但②中的user,你要想个办法传入或直接将session_timeout传到SessionStore实现上. (setattr(request.session,"sessin_timeout",user.get_profile().session_timeout)当获取用户时,你也要考虑用户没有登录的情况. 这样,就转用django的原设定. 代码其实不多,但可能要考虑仔细些


随手写的,可能有遗漏的地方,欢迎补充

相关推荐

    Django Session和Cookie分别实现记住用户登录状态操作

    在Django框架中,有两种主要方法可以实现这一功能:Django Session和Cookie。理解这两者的工作原理和如何在Django中使用它们至关重要。 首先,让我们深入了解Cookie。Cookie是由服务器发送到用户浏览器的一小段数据...

    django session完成状态保持的方法

    ### Django Session 完成状态保持的方法 #### 一、引言 HTTP 协议作为互联网上应用最为广泛的一种网络协议,其本质特点是无状态的。这意味着每次客户端与服务器之间的交互都是独立的,服务器不会保留任何关于之前的...

    Python库 | django-session-idle-timeout-1.3.0.tar.gz

    《Python库 Django-session-idle-timeout的深度解析》 在Python的世界里,Django作为一款强大的Web框架,因其高效、易用和丰富的功能而备受开发者喜爱。而在Django的生态系统中,有一个名为`django-session-idle-...

    Django_ORM.zip_Oldboy 3_django_django orm_orm_session

    "Oldboy 3"可能是某种教学系列或者课程的第三部分,专门讲解Django ORM和session的使用。 "django_orm"是Django中的一个重要组成部分,它实现了ORM系统。ORM使得开发者可以将数据库操作与业务逻辑分离,通过Python...

    django之session与分页(实例讲解)

    在本文中,我们将深入探讨Django框架中的两个关键概念:Session和分页,并通过实例来讲解它们的使用方法。 首先,我们来看Django的Session机制。Session是服务器端存储用户状态的一种方式,与Cookie相比,它提供了...

    解决Django no such table: django_session的问题

    综上所述,解决`no such table: django_session`问题的关键在于正确地迁移数据库,并确保数据库配置和版本与Django框架兼容。遵循上述步骤,你应该能够成功地修复这个问题并继续使用Django的session功能。

    Django操作session 的方法

    Django的Session机制是Web开发中用于管理用户会话的关键技术。它允许开发者在服务器端存储用户的状态信息,比如登录状态、购物车等,而这些信息不会随着HTTP请求的无状态性丢失。以下是对Django操作Session的详细...

    Django中使用session保持用户登陆连接的例子

    Django作为一款流行的Python Web框架,提供了一套内建的Session框架来帮助开发者实现用户的登录保持。Session框架在用户登录后在服务器端生成一个唯一的会话标识(session key),然后将其作为cookie存储在用户的...

    django 图片验证:使用加密的方法而非session

    注意jquery.js的路径和名字! 博文链接:https://zhougaomin-007.iteye.com/blog/148047

    Django cookie 与 session

    然而,Cookie的大小有限,且存在安全性问题,因此对于存储敏感信息,比如用户身份验证信息,通常会使用Session。Session是一种在服务器端保持状态的技术,它为每个客户端分配一个唯一的Session ID,这个ID通过Cookie...

    django-session-cleanup:定期任务,用于从django_session表中删除过期的Django会话

    Django会话清理对于使用cached_db或db会话引擎的项目,一段时间后django_session表可能会变得很大。 Django提供了“ cleanup”管理命令,用于从此表中删除过期的会话,但是您必须手动运行此命令或设置cron作业。 ...

    django-利用session机制实现唯一登录的例子

    session_data = DjangoSession.objects.filter(session_key=key).values_list('session_data')[0][0] # 删除key不为当前key,session_data等于当前session_data的session记录 DjangoSession.objects.filter(session...

    Django中的session用法详解

    为了解决这个问题,Django提供了Session机制来维护用户的状态。 **Session的工作原理**: 1. **创建Session ID**:当用户第一次访问应用时,服务器会生成一个唯一的Session ID,并将其存储在客户端的Cookie中。 2. ...

    django框架之cookie/session的使用示例(小结)

    在Web开发中,Django框架提供了方便的cookie和session管理机制,用于解决HTTP协议无状态的问题。HTTP协议本身不支持会话跟踪,因此需要借助额外的技术,如cookie和session,来实现用户状态的维护。 一、HTTP协议无...

    Django框架自定义session处理操作示例

    1. **原有系统的兼容性问题**:如果在现有系统基础上使用 Django 构建 Web 版本,原有的数据库结构可能无法直接支持 Django 的 Session 表结构。 2. **特定业务逻辑的需求**:某些业务场景下,需要对 Session 数据...

    Python Web框架之Django框架cookie和session用法分析

    为了解决这个问题,引入了cookie和session的概念。 1. **Cookie的概念**:Cookie是一种存储在用户浏览器中的小型文本文件,它可以保存用户的偏好设置、登录信息或其他需要跨页面请求传递的信息。Cookie可以被服务器...

    Django 5种类型Session使用方法解析

    Django,一个流行的Python web框架,提供了一套完善的Session管理机制。本文将深入解析Django中的五种Session存储方式以及如何在实际应用中使用它们。 首先,理解Session的基本原理:当用户与Web应用程序交互时,...

    用django设置session过期时间的方法解析

    session的超时时间设置 settings中 SESSION_COOKIE_AGE=60*30 30分钟。 SESSION_EXPIRE_AT_BROWSER_CLOSE False:会话cookie可以在用户浏览器中保持有效期。True:关闭浏览器,则Cookie失效。 SESSION_COOKIE_...

Global site tag (gtag.js) - Google Analytics