1 // Copyright 2012 The Gorilla Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
15 data = make(map[*http.Request]map[interface{}]interface{})
16 datat = make(map[*http.Request]int64)
19 // Set stores a value for a given key in a given request.
20 func Set(r *http.Request, key, val interface{}) {
23 data[r] = make(map[interface{}]interface{})
24 datat[r] = time.Now().Unix()
30 // Get returns a value stored for a given key in a given request.
31 func Get(r *http.Request, key interface{}) interface{} {
33 if ctx := data[r]; ctx != nil {
42 // GetOk returns stored value and presence state like multi-value return of map access.
43 func GetOk(r *http.Request, key interface{}) (interface{}, bool) {
45 if _, ok := data[r]; ok {
46 value, ok := data[r][key]
54 // GetAll returns all stored values for the request as a map. Nil is returned for invalid requests.
55 func GetAll(r *http.Request) map[interface{}]interface{} {
57 if context, ok := data[r]; ok {
58 result := make(map[interface{}]interface{}, len(context))
59 for k, v := range context {
69 // GetAllOk returns all stored values for the request as a map and a boolean value that indicates if
70 // the request was registered.
71 func GetAllOk(r *http.Request) (map[interface{}]interface{}, bool) {
73 context, ok := data[r]
74 result := make(map[interface{}]interface{}, len(context))
75 for k, v := range context {
82 // Delete removes a value stored for a given key in a given request.
83 func Delete(r *http.Request, key interface{}) {
91 // Clear removes all values stored for a given request.
93 // This is usually called by a handler wrapper to clean up request
94 // variables at the end of a request lifetime. See ClearHandler().
95 func Clear(r *http.Request) {
101 // clear is Clear without the lock.
102 func clear(r *http.Request) {
107 // Purge removes request data stored for longer than maxAge, in seconds.
108 // It returns the amount of requests removed.
110 // If maxAge <= 0, all request data is removed.
112 // This is only used for sanity check: in case context cleaning was not
113 // properly set some request data can be kept forever, consuming an increasing
114 // amount of memory. In case this is detected, Purge() must be called
115 // periodically until the problem is fixed.
116 func Purge(maxAge int) int {
121 data = make(map[*http.Request]map[interface{}]interface{})
122 datat = make(map[*http.Request]int64)
124 min := time.Now().Unix() - int64(maxAge)
125 for r := range data {
136 // ClearHandler wraps an http.Handler and clears request values at the end
137 // of a request lifetime.
138 func ClearHandler(h http.Handler) http.Handler {
139 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {