【发布时间】:2018-09-22 11:26:18
【问题描述】:
我必须编写这个场景的代码:
一些用户来填写表格,当用户填写表格时,会话过期; 用户尝试提交表单,因为会话已过期,它将带他到登录页面,之后他被重定向到表单页面,其中预先填写了他之前填写的数据。
我提出的解决方案: 在表单提交时,检查用户会话是否通过 ajax 调用过期,如果是,则删除一个带有已填写表单值的 cookie,用户返回相同的表单,从 cookie 值预填充表单。
我走了多远: 不多;我使用 ajax 调用来检查会话过期,并通过后端调用此函数:
def check_valid_session(request):
session_expiry_date = request.session.get_expiry_date()
now = datetime.now()
seconds_left = (session_expiry_date - now).total_seconds()
if seconds_left <= 0:
return JsonResponse({'session_expired': True, 'seconds_left': seconds_left })
else:
return JsonResponse({'session_expired':False, 'seconds_left': seconds_left})
在我的设置中:
SESSION_COOKIE_NAME = "sso-sessionid"
SESSION_COOKIE_HTTPONLY = False
SESSION_COOKIE_AGE = 10
SESSION_COOKIE_DOMAIN = '.mydomain.com'
SESSION_COOKIE_SECURE = True
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
但作为回应,我总是得到 seconds_left 接近 9.999。 每次我点击提交并调用上面的后端代码时,session_expiry_date 都会自行增加 10 秒。 如何获得正确的会话过期时间?任何替代方法?
【问题讨论】:
-
您知道如何查找会话是否已过期吗? request.session.get_expiry_age() - 实际上并没有返回会话到期前还剩多少秒。它只给出我们在 request.session.set_expiry(10) 中设置的内容。
标签: python jquery django session-cookies