我有一個用戶登錄。 如何擴展/更新從請求接收到的會話的終止日期? 在此先感謝!在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. 如何在jsf 2.0中使會話失效,如果瀏覽器關閉而不會使當前會話無效。
- 4. facebook api - 如何過期當前會話?
- 5. PHP更新日期時間與會話
- 6. 更改日期選擇器對話框當前日期 - android java
- 7. MongoDB的更新與當前日期和時間日期
- 8. django:在pre_save信號中更新會話
- 9. 如何找到創建或更新當前日期的文件/
- 10. 在更新時保留dygraph中的當前日期範圍rollmean
- 11. 如何在PL/SQL中減去當前日期的日期
- 12. 更改當前日期
- 13. 如何將新日期條目設置爲當前日期?
- 14. 會話變量在會話過期前丟失
- 15. 如何在jsdatepicker當前日期之前禁用日期
- 16. 會話管理 - 可以過期並失效的多個會話?
- 17. 在android中更新sqlite列與當前日期時間
- 18. 如何比較日期值在dataGrid中使用當前日期?
- 19. Grails中的當前會話
- 20. oc4j會話失效
- 21. 找到當前日期和日期在java中的日期
- 22. 如何將android datepicker對話框的最大日期設置爲當前日期?
- 23. 觸發器更新Postgres 9中的當前日期
- 24. 如何在當前日期之前禁用先前日期的按鈕? Android
- 25. 如何檢查當前日期與數據表中的日期?
- 26. 如何驗證JavaScript中當前日期的一個日期?
- 27. 如何比較當前日期和Jtable中的給定日期?
- 28. 當前日期
- 29. Django會話過期
- 30. 我如何在salesforce中顯示當前的星期日期?
在續約我想會話的到期日從目前的時間爲15天。 – Nullpoet 2010-06-15 11:54:39