@@ -162,26 +162,31 @@ func (s *SessionManager) LoadAndSave(next http.Handler) http.Handler {
162162 next .ServeHTTP (sw , sr )
163163
164164 if ! sw .written {
165- s .commitAndAddSessionCookie (w , sr )
165+ err := s .commitAndAddSessionCookie (sw .ResponseWriter , sw .request )
166+ if err != nil {
167+ s .ErrorFunc (sw .ResponseWriter , sw .request , err )
168+ return
169+ }
166170 }
167171 })
168172}
169173
170- func (s * SessionManager ) commitAndAddSessionCookie (w http.ResponseWriter , r * http.Request ) {
174+ func (s * SessionManager ) commitAndAddSessionCookie (w http.ResponseWriter , r * http.Request ) error {
171175 ctx := r .Context ()
172176
173177 switch s .Status (ctx ) {
174178 case Modified :
175179 token , expiry , err := s .Commit (ctx )
176180 if err != nil {
177- s .ErrorFunc (w , r , err )
178- return
181+ return err
179182 }
180183
181184 s .AddSessionCookie (ctx , w , token , expiry )
182185 case Destroyed :
183186 s .AddSessionCookie (ctx , w , "" , time.Time {})
184187 }
188+
189+ return nil
185190}
186191
187192// Deprecated: WriteSessionCookie is a backwards-compatible alias for
@@ -238,17 +243,27 @@ type sessionResponseWriter struct {
238243
239244func (sw * sessionResponseWriter ) Write (b []byte ) (int , error ) {
240245 if ! sw .written {
241- sw .sessionManager .commitAndAddSessionCookie (sw .ResponseWriter , sw .request )
242246 sw .written = true
247+
248+ err := sw .sessionManager .commitAndAddSessionCookie (sw .ResponseWriter , sw .request )
249+ if err != nil {
250+ sw .sessionManager .ErrorFunc (sw .ResponseWriter , sw .request , err )
251+ return 0 , nil
252+ }
243253 }
244254
245255 return sw .ResponseWriter .Write (b )
246256}
247257
248258func (sw * sessionResponseWriter ) WriteHeader (code int ) {
249259 if ! sw .written {
250- sw .sessionManager .commitAndAddSessionCookie (sw .ResponseWriter , sw .request )
251260 sw .written = true
261+
262+ err := sw .sessionManager .commitAndAddSessionCookie (sw .ResponseWriter , sw .request )
263+ if err != nil {
264+ sw .sessionManager .ErrorFunc (sw .ResponseWriter , sw .request , err )
265+ return
266+ }
252267 }
253268
254269 sw .ResponseWriter .WriteHeader (code )
0 commit comments