我有一個用戶登錄。 如何擴展/更新從請求接收到的會話的終止日期? 在此先感謝!在django中:如何更新當前會話的失效日期?
回答
設置SESSION_COOKIE_AGE是我爲此設計的。在此期間登錄後cookie自動設置。
您還可以使用SESSION_SAVE_EVERY_REQUEST設置在每個請求上保存會話Cookie。
這是一些擴展認證用戶會話的中間件。如果他們的會話expiry_date
距離不到30天,它基本上可以通過延長會話的60天來讓他們永久登錄。
custom_middleware.py:
from datetime import timedelta
from django.utils import timezone
EXTENDED_SESSION_DAYS = 60
EXPIRE_THRESHOLD = 30
class ExtendUserSession(object):
"""
Extend authenticated user's sessions so they don't have to log back in
every 2 weeks (set by Django's default `SESSION_COOKIE_AGE` setting).
"""
def process_request(self, request):
# Only extend the session for auth'd users
if request.user.is_authenticated():
now = timezone.now()
# Only extend the session if the current expiry_date is less than 30 days from now
if request.session.get_expiry_date() < now + timedelta(days=EXPIRE_THRESHOLD):
request.session.set_expiry(now + timedelta(days=EXTENDED_SESSION_DAYS))
然後,您將需要經過 Django的SessionMiddleware添加這個定製中間件,因此您的設置文件應該是這樣:
項目/ settings.py :
MIDDLEWARE_CLASSES = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
'project.custom_middleware.ExtendUserSession',
...
]
這是否*絕對*廣告作品? 'get_expiry_date'的[docs](https://docs.djangoproject.com/zh/1.10/topics/http/sessions/#django.contrib.sessions.backends.base.SessionBase.get_expiry_date)表示「這將等於從**現在**「(重點是我的)日期'SESSION_COOKIE_AGE'秒,這與我的本地測試一致。 – 2017-03-30 21:54:48
不需要爲此創建自定義中間件。
設置SESSION_SAVE_EVERY_REQUEST = True
將導致Django的現有SessionMiddleware
做你想要的。
它有這樣的代碼:
if modified or settings.SESSION_SAVE_EVERY_REQUEST:
if request.session.get_expire_at_browser_close():
max_age = None
expires = None
else:
max_age = request.session.get_expiry_age()
expires_time = time.time() + max_age
expires = cookie_date(expires_time)
# Save the session data and refresh the client cookie.
# Skip session save for 500 responses, refs #3881.
if response.status_code != 500:
request.session.save()
response.set_cookie(settings.SESSION_COOKIE_NAME,
request.session.session_key, max_age=max_age,
expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
path=settings.SESSION_COOKIE_PATH,
secure=settings.SESSION_COOKIE_SECURE or None,
httponly=settings.SESSION_COOKIE_HTTPONLY or None)
這絕對是這樣做的正確方法。 – Risadinha 2017-09-06 13:47:19
- 1. 更新日期時失效日期
- 2. 更新當前會話
- 3. 如何將日期更新爲UTC的當前日期-8
- 4. 如何在jsf 2.0中使會話失效,如果瀏覽器關閉而不會使當前會話無效。
- 5. 如何獲取當前會話的日期格式
- 6. 當前日期和以前的日期和更新目標
- 7. 過去在wordpress中的項目失效日期 - 不顯示當前日期
- 8. facebook api - 如何過期當前會話?
- 9. 如何將表格中的日期更新爲當前日期+ 30
- 10. PHP更新日期時間與會話
- 11. 如何處理在Django中API會話過期的會話?
- 12. 更改日期選擇器對話框當前日期 - android java
- 13. 在日期選擇器對話中選取當前日期
- 14. django:在pre_save信號中更新會話
- 15. MongoDB的更新與當前日期和時間日期
- 16. 如何找到創建或更新當前日期的文件/
- 17. 重新生成會話ID而不會使前一個失效?
- 18. 在更新時保留dygraph中的當前日期範圍rollmean
- 19. 如何計算在javascript中選擇日期的當前日期?
- 20. 如何在PL/SQL中減去當前日期的日期
- 21. 更改當前日期
- 22. 根據當前日期更新'日期'數據
- 23. 如何將新日期條目設置爲當前日期?
- 24. 會話變量在會話過期前丟失
- 25. 如何在jsdatepicker當前日期之前禁用日期
- 26. 當前日期的有效使用
- 27. 會話管理 - 可以過期並失效的多個會話?
- 28. 已更新 - Firefox中的無效日期
- 29. 在android中更新sqlite列與當前日期時間
- 30. 如何比較日期值在dataGrid中使用當前日期?
在續約我想會話的到期日從目前的時間爲15天。 – Nullpoet 2010-06-15 11:54:39