README.md (5010B)
1 # sessions 2 3 [![GoDoc](https://godoc.org/github.com/gorilla/sessions?status.svg)](https://godoc.org/github.com/gorilla/sessions) [![Build Status](https://travis-ci.org/gorilla/sessions.svg?branch=master)](https://travis-ci.org/gorilla/sessions) 4 [![Sourcegraph](https://sourcegraph.com/github.com/gorilla/sessions/-/badge.svg)](https://sourcegraph.com/github.com/gorilla/sessions?badge) 5 6 gorilla/sessions provides cookie and filesystem sessions and infrastructure for 7 custom session backends. 8 9 The key features are: 10 11 - Simple API: use it as an easy way to set signed (and optionally 12 encrypted) cookies. 13 - Built-in backends to store sessions in cookies or the filesystem. 14 - Flash messages: session values that last until read. 15 - Convenient way to switch session persistency (aka "remember me") and set 16 other attributes. 17 - Mechanism to rotate authentication and encryption keys. 18 - Multiple sessions per request, even using different backends. 19 - Interfaces and infrastructure for custom session backends: sessions from 20 different stores can be retrieved and batch-saved using a common API. 21 22 Let's start with an example that shows the sessions API in a nutshell: 23 24 ```go 25 import ( 26 "net/http" 27 "github.com/gorilla/sessions" 28 ) 29 30 // Note: Don't store your key in your source code. Pass it via an 31 // environmental variable, or flag (or both), and don't accidentally commit it 32 // alongside your code. Ensure your key is sufficiently random - i.e. use Go's 33 // crypto/rand or securecookie.GenerateRandomKey(32) and persist the result. 34 var store = sessions.NewCookieStore([]byte(os.Getenv("SESSION_KEY"))) 35 36 func MyHandler(w http.ResponseWriter, r *http.Request) { 37 // Get a session. We're ignoring the error resulted from decoding an 38 // existing session: Get() always returns a session, even if empty. 39 session, _ := store.Get(r, "session-name") 40 // Set some session values. 41 session.Values["foo"] = "bar" 42 session.Values[42] = 43 43 // Save it before we write to the response/return from the handler. 44 err := session.Save(r, w) 45 if err != nil { 46 http.Error(w, err.Error(), http.StatusInternalServerError) 47 return 48 } 49 } 50 ``` 51 52 First we initialize a session store calling `NewCookieStore()` and passing a 53 secret key used to authenticate the session. Inside the handler, we call 54 `store.Get()` to retrieve an existing session or create a new one. Then we set 55 some session values in session.Values, which is a `map[interface{}]interface{}`. 56 And finally we call `session.Save()` to save the session in the response. 57 58 More examples are available [on the Gorilla 59 website](https://www.gorillatoolkit.org/pkg/sessions). 60 61 ## Store Implementations 62 63 Other implementations of the `sessions.Store` interface: 64 65 - [github.com/starJammer/gorilla-sessions-arangodb](https://github.com/starJammer/gorilla-sessions-arangodb) - ArangoDB 66 - [github.com/yosssi/boltstore](https://github.com/yosssi/boltstore) - Bolt 67 - [github.com/srinathgs/couchbasestore](https://github.com/srinathgs/couchbasestore) - Couchbase 68 - [github.com/denizeren/dynamostore](https://github.com/denizeren/dynamostore) - Dynamodb on AWS 69 - [github.com/savaki/dynastore](https://github.com/savaki/dynastore) - DynamoDB on AWS (Official AWS library) 70 - [github.com/bradleypeabody/gorilla-sessions-memcache](https://github.com/bradleypeabody/gorilla-sessions-memcache) - Memcache 71 - [github.com/dsoprea/go-appengine-sessioncascade](https://github.com/dsoprea/go-appengine-sessioncascade) - Memcache/Datastore/Context in AppEngine 72 - [github.com/kidstuff/mongostore](https://github.com/kidstuff/mongostore) - MongoDB 73 - [github.com/srinathgs/mysqlstore](https://github.com/srinathgs/mysqlstore) - MySQL 74 - [github.com/EnumApps/clustersqlstore](https://github.com/EnumApps/clustersqlstore) - MySQL Cluster 75 - [github.com/antonlindstrom/pgstore](https://github.com/antonlindstrom/pgstore) - PostgreSQL 76 - [github.com/boj/redistore](https://github.com/boj/redistore) - Redis 77 - [github.com/rbcervilla/redisstore](https://github.com/rbcervilla/redisstore) - Redis (Single, Sentinel, Cluster) 78 - [github.com/boj/rethinkstore](https://github.com/boj/rethinkstore) - RethinkDB 79 - [github.com/boj/riakstore](https://github.com/boj/riakstore) - Riak 80 - [github.com/michaeljs1990/sqlitestore](https://github.com/michaeljs1990/sqlitestore) - SQLite 81 - [github.com/wader/gormstore](https://github.com/wader/gormstore) - GORM (MySQL, PostgreSQL, SQLite) 82 - [github.com/gernest/qlstore](https://github.com/gernest/qlstore) - ql 83 - [github.com/quasoft/memstore](https://github.com/quasoft/memstore) - In-memory implementation for use in unit tests 84 - [github.com/lafriks/xormstore](https://github.com/lafriks/xormstore) - XORM (MySQL, PostgreSQL, SQLite, Microsoft SQL Server, TiDB) 85 - [github.com/GoogleCloudPlatform/firestore-gorilla-sessions](https://github.com/GoogleCloudPlatform/firestore-gorilla-sessions) - Cloud Firestore 86 - [github.com/stephenafamo/crdbstore](https://github.com/stephenafamo/crdbstore) - CockroachDB 87 88 ## License 89 90 BSD licensed. See the LICENSE file for details.