| 1 | Index: contrib/sessions/middleware.py
|
|---|
| 2 | ===================================================================
|
|---|
| 3 | --- contrib/sessions/middleware.py (revision 4872)
|
|---|
| 4 | +++ contrib/sessions/middleware.py (working copy)
|
|---|
| 5 | @@ -68,10 +68,21 @@
|
|---|
| 6 | _session = property(_get_session)
|
|---|
| 7 |
|
|---|
| 8 | class SessionMiddleware(object):
|
|---|
| 9 | + def __init__(self):
|
|---|
| 10 | + self.exception_occured = False
|
|---|
| 11 | +
|
|---|
| 12 | def process_request(self, request):
|
|---|
| 13 | request.session = SessionWrapper(request.COOKIES.get(settings.SESSION_COOKIE_NAME, None))
|
|---|
| 14 |
|
|---|
| 15 | + def process_exception(self, request, exception):
|
|---|
| 16 | + self.exception_occured = True
|
|---|
| 17 | +
|
|---|
| 18 | def process_response(self, request, response):
|
|---|
| 19 | + # Don't try to save session when process method raised an exception. In case of database exceptions
|
|---|
| 20 | + # it may not even be possible. See ticket #3881.
|
|---|
| 21 | + if self.exception_occured:
|
|---|
| 22 | + return response
|
|---|
| 23 | +
|
|---|
| 24 | # If request.session was modified, or if response.session was set, save
|
|---|
| 25 | # those changes and set a session cookie.
|
|---|
| 26 | try:
|
|---|