标签: django-sessions

由于Django应用程序中的不活动,如何强制执行自动注销?

在我的Django应用程序中,我希望用户在30分钟不活动后自动注销,所以我在settings.py中使用了这个设置:

SESSION_COOKIE_AGE = 1800
Run Code Online (Sandbox Code Playgroud)

但是,使用此设置会在30分钟内将用户注销,而不管活动如何.由于Django应用程序中的不活动,如何强制执行自动注销?

django django-sessions

7
推荐指数
2
解决办法
9224
查看次数

django会话的棘手问题:有时会话信息被删除

我在我的应用程序中有一个奇怪的django会话错误:有时(大约10次,每天约20000)用户的会话信息被删除.我通过日志文件跟踪它:在页面A,有用户会话的信息,在提交表单后,在下一页他的会话为空.我尝试了两种类型的存储:memcached + db和db,这个问题适用于它们.我尝试重现这些场景,但是正如我所说,所有这些都按预期工作,这种情况非常罕见.我还检查了这个问题是否存在于不同的用户,并且对于它们来说每次都不会重现.我没有任何想法如何找到根本原因,我不知道在这里发布什么作为描述.如果有人有任何想法,请告诉我.如果它很重要,我正在使用django 1.2 + FastCGI运行我的应用程序.谢谢!

UPD:我检查并看到在两个连续请求期间,使用的会话密钥没有改变,首先请求有一个实际的会话状态,而在第二个会话变量与空相关.

django django-sessions

7
推荐指数
1
解决办法
1216
查看次数

有时request.session.session_key为None

我从get_key中获取了一个问题request.session.

我正在使用Django1.8和Python2.7.10来设置RESTful服务.

这是我的登录视图的片段:

user = authenticate(username=userName, password=passWord)
if user is not None:
    # the password verified for the user
    if user.is_active:
        # app_logger.debug("User is valid, active and authenticated")
        if hasattr(user, 'parent') :
            login(request, user)
            request.session['ut'] = 4 
            # user type 1 means admin, 2 for teacher, 3 for student, 4 for parents
            request.session['uid'] = user.id
            description = request.POST.get('description','')

            request.session['realname'] = user.parent.realname
            request.session['pid'] = user.parent.id
            devicemanage.update_user_device(devicetoken, user.id, ostype, description) 
            children = parentmanage.get_children_info(user.parent.id)
            session_id = request.session.session_key
            user.parent.login_status = True
            user.parent.save() …
Run Code Online (Sandbox Code Playgroud)

python django session django-sessions

7
推荐指数
2
解决办法
9333
查看次数

对于 Django DRF 后端来说,是否有一种身份验证方法更安全?

我想使用最安全的方法将登录的用户会话存储在 cookie 中。后端是基于 Django 和 DRF 构建的,因此我在用于令牌身份验证的 simplejwt 插件或 djangos 默认 SessionAuth 之间进行选择。前端不是 SPA,但最终也会有一个移动应用程序。所以我一直倾向于令牌身份验证,将它们存储在寿命较短的 httpOnly cookie 中。但那时,我想知道我是否本质上只是以一种迂回的方式进行会话身份验证?

对于该应用程序,一个比另一个更好(就安全性而言)?

django-authentication django-sessions django-rest-framework django-rest-framework-jwt django-rest-framework-simplejwt

7
推荐指数
1
解决办法
2242
查看次数

在Django中使用会话

我在Django中使用会话来存储登录用户信息以及一些其他信息.我一直在浏览Django会话网站,但仍然有一些问题.

来自Django网站:

默认情况下,Django将会话存储在您的数据库中(使用该模型 django.contrib.sessions.models.Session).虽然这很方便,但在某些设置中,将会话数据存储在其他地方的速度更快,因此可以将Django配置为在文件系统或缓存中存储会话数据.

也:

对于持久性缓存数据,请设置 SESSION_ENGINEdjango.contrib.sessions.backends.cached_db.这使用直写高速缓存 - 每次写入高速缓存也将写入数据库.如果数据尚未存在于缓存中,则会话只读使用数据库.

有一个很好的经验法则可以使用哪一个?cached_db似乎总是一个更好的选择,因为最好的情况是,数据在缓存中,最坏的情况是它在数据库中无论如何都是如此.一个缺点是我必须设置memcached.

默认情况下,SESSION_EXPIRE_AT_BROWSER_CLOSE设置为False,这意味着会话cookie将存储在用户的浏览器中SESSION_COOKIE_AGE.如果您不希望每次打开浏览器时都必须登录,请使用此选项.

是否可以同时使用,会话在浏览器关闭时到期并给出年龄?

如果value是一个整数,则会话将在该多次不活动后过期.例如,调用 request.session.set_expiry(300)会使会话在5分钟后到期.

什么被认为是"不活跃"?

如果您正在使用数据库后端,请注意会话数据可能会累积在django_session 数据库表中,而Django不会提供自动清除.因此,您的工作是定期清除过期的会话.

这意味着,即使会话过期,我的数据库中仍有记录.究竟哪里会把代码放到"清除数据库"?我觉得你需要一个单独的线程来每隔一段时间(每小时?)浏览数据库并删除任何过期的会话.

python django session django-sessions

6
推荐指数
1
解决办法
3542
查看次数

Django:确定在使用post_delete信号时哪个用户正在删除

我希望管理员在删除某些对象时收到通知,但我也想确定哪个用户正在执行删除.

可能吗?

这是代码:

# models.py
# signal to notify admins when nodes are deleted
from django.db.models.signals import post_delete
from settings import DEBUG

def notify_on_delete(sender, instance, using, **kwargs):
    ''' Notify admins when nodes are deleted. Only for production use '''
    if DEBUG:
        #return False
        pass
    # prepare context
    context = {
        'node': instance,
        'site': SITE
    }
    # notify admins that want to receive notifications
    notify_admins(instance, 'email_notifications/node-deleted-admin_subject.txt', 'email_notifications/node-deleted-admin_body.txt', context, skip=False)

post_delete.connect(notify_on_delete, sender=Node)
Run Code Online (Sandbox Code Playgroud)

python django django-signals django-models django-sessions

6
推荐指数
1
解决办法
1553
查看次数

Django/Auth:logout清除会话数据?

我想知道auth.logout是否清除了会话数据,或者我必须自己做.

from django.contrib.auth.decorators import login_required
from django.contrib import auth
@login_required
def logout(request):
    auth.logout(request)
    return redirect('base:homepage')
Run Code Online (Sandbox Code Playgroud)

像这样......

from django.contrib.auth.decorators import login_required
from django.contrib import auth

@login_required
def logout(request):
    for sesskey in request.session.keys():
        del request.session[sesskey]
    auth.logout(request)
    return redirect('base:homepage')
Run Code Online (Sandbox Code Playgroud)

谢谢!

django session-variables django-authentication django-sessions

6
推荐指数
1
解决办法
8904
查看次数

关闭了AWS Load Balancer粘性的Django用户会话

我在Elastic Load Balancer(ELB)后面使用AWS Elastic Beanstalk和EC2服务器.

我在ELB上启用了"粘性会话",因为这是我可以让django用户会话正常工作的唯一方法.但是,在高峰流量时,这会导致问题,因为ELB不再均匀地分配每个传入请求.这通常会像迷你DDOS一样超载1台服务器.

我想要做的是使用服务器端用户会话,其中用户身份验证信息存储在我的Redis缓存中.我试过设置SESSION_ENGINE很多东西,比如:

SESSION_ENGINE = 'redis_sessions.session' 
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
Run Code Online (Sandbox Code Playgroud)

然后,当我关闭粘性会话时,我无法登录,因为请求最终会转到不同的服务器,其中某些请求已经过身份验证而其他请求未经过身份验证.那些不是,将我重定向回登录页面.

以下是我的一些其他相关设置:

INSTALLED_APPS = (
    ...,
    'django.contrib.sessions',
    ...,
)
MIDDLEWARE_CLASSES = (  
    ...,
    'djangosecure.middleware.SecurityMiddleware',
    ...,
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...,
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    ...,
)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?非常感谢.

django load-balancing django-sessions amazon-elastic-beanstalk sticky-session

6
推荐指数
1
解决办法
833
查看次数

Django 会话在 Firefox 中不起作用

我有一个搜索视图,它在会话中保存一些数据以供另一个视图使用:

def search(request):
    ...
    if request.method == 'POST':
        form = SearchForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            melk=data(cd)
            request.session['data'] = melk
            request.session['form'] = form
            return redirect('/result/')
    ...

def result(request):
    ...
    melk_list = request.session['data']
    form = request.session['form']
    ...
Run Code Online (Sandbox Code Playgroud)

当我使用 Chrome 时,一切都很好。但是当我使用 Firefox 时,第一次运行得很好,但之后每次搜索都会返回我的第一个结果!request.session第一次之后似乎没有改变。我尝试使用 删除会话del request.session['data'],但没有成功。

我的会话后端是一个数据库,但 Firefox 制作了一个会话 cookie。

python django django-sessions

5
推荐指数
1
解决办法
1733
查看次数

在 Django 中禁用会话

我的网站提供几乎静态的页面,并且没有用户登录等。

出于性能原因,我想完全禁用会话(因此 django 不会访问数据库以获取每个请求的会话)。

django.contrib.sessions从 INSTALLED_APPS 中删除了,还有什么我需要做的吗?

python django django-sessions

5
推荐指数
1
解决办法
4012
查看次数