81 lines
2.1 KiB
Markdown
81 lines
2.1 KiB
Markdown
# BoltStore - Session store using Bolt
|
|
|
|
[![wercker status](https://app.wercker.com/status/752959ce0f923476671e49fb9b76ebe0/m "wercker status")](https://app.wercker.com/project/bykey/752959ce0f923476671e49fb9b76ebe0)
|
|
[![Coverage Status](https://coveralls.io/repos/yosssi/boltstore/badge.png?branch=HEAD)](https://coveralls.io/r/yosssi/boltstore)
|
|
[![GoDoc](https://godoc.org/github.com/yosssi/boltstore?status.png)](https://godoc.org/github.com/yosssi/boltstore)
|
|
|
|
## About
|
|
|
|
BoltStore is a session store using [Bolt](https://github.com/boltdb/bolt). This store implements the [gorilla/sessions](https://github.com/gorilla/sessions) package's [Store](http://godoc.org/github.com/gorilla/sessions#Store) interface.
|
|
|
|
## Installation
|
|
|
|
```go
|
|
go get github.com/yosssi/boltstore/...
|
|
```
|
|
|
|
## Example
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/boltdb/bolt"
|
|
"github.com/gorilla/sessions"
|
|
"github.com/yosssi/boltstore/reaper"
|
|
"github.com/yosssi/boltstore/store"
|
|
)
|
|
|
|
var db *bolt.DB
|
|
|
|
func handler(w http.ResponseWriter, r *http.Request) {
|
|
// Fetch a new store.
|
|
str, err := store.New(db, store.Config{}, []byte("secret-key"))
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
}
|
|
|
|
// Get a session.
|
|
session, err := str.Get(r, "session-key")
|
|
if err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
}
|
|
|
|
// Add a value on the session.
|
|
session.Values["foo"] = "bar"
|
|
|
|
// Save the session.
|
|
if err := sessions.Save(r, w); err != nil {
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
}
|
|
|
|
// Delete the session.
|
|
session.Options.MaxAge = -1
|
|
if err := sessions.Save(r, w); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Fprintf(w, "Hello BoltStore")
|
|
}
|
|
|
|
func main() {
|
|
var err error
|
|
// Open a Bolt database.
|
|
db, err = bolt.Open("./sessions.db", 0666)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer db.Close()
|
|
// Invoke a reaper which checks and removes expired sessions periodically.
|
|
defer reaper.Quit(reaper.Run(db, reaper.Options{}))
|
|
http.HandleFunc("/", handler)
|
|
http.ListenAndServe(":8080", nil)
|
|
}
|
|
```
|
|
|
|
## Documentation
|
|
* [GoDoc](http://godoc.org/github.com/yosssi/boltstore)
|