I do this by calling session.clear()
.
EDIT:
After reading your comment in another answer, I see that you're trying to prevent a replay attack that might be made using a cookie that was issued in the past. I solved that problem as much as possible* with this approach:
- Override SecureCookieSessionInterface.save_session(), copying the code from the overridden version rather than calling it.
- When the overridden version of
save_session()
calls save_cookie()
, make it pass a session_expires
argument 30 minutes in the future. This causes cookies more than 30 minutes old to be considered invalid.
- Make the overridden version of
save_session()
update a session variable every so often, to make sure the cookie and its session_expires
time get rewritten regularly. (I name this session variable '_refresh' and store the current time in it, then rewrite it only if more than a few seconds have passed since the last-stored time. This optimization avoids rewriting the cookie on every HTTP request.)
Duplicating Flask code in the custom save_session()
makes this approach a bit ugly and brittle, but it is necessary in order to change the arguments passed to save_cookie()
. It would be nice if Flask made this easier, or at least implemented its own safeguard against replay attacks.
*WARNING: This approach by itself will not stop replay attacks that might happen during a session cookie's valid lifetime. This fundamental problem with cookie-based sessions is discussed in RFC 6896 and A Secure Cookie Protocol by Liu, Kovacs, Huang, Gouda.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…