mirror of https://github.com/vapor/docs.git
85 lines
1.6 KiB
Markdown
85 lines
1.6 KiB
Markdown
# Sessions
|
|
|
|
Sessions help you store information about a user between requests. As long as the client supports cookies, sessions are easy to create.
|
|
|
|
## Middleware
|
|
|
|
Enable sessions on your `Droplet` by adding `"sessions"` to your middleware array.
|
|
|
|
`Config/droplet.json`
|
|
```json
|
|
{
|
|
...,
|
|
"middleware": [
|
|
...,
|
|
"sessions",
|
|
...,
|
|
],
|
|
...,
|
|
}
|
|
```
|
|
|
|
By default, the memory sessions driver will be used. You can change this with the `droplet.sessions` key.
|
|
|
|
|
|
`Config/droplet.json`
|
|
```json
|
|
{
|
|
...,
|
|
"sessions": "memory",
|
|
...,
|
|
}
|
|
```
|
|
|
|
## Request
|
|
|
|
After `SessionMiddleware` has been enabled, you can access the `req.assertSession()` method to get access to session.
|
|
|
|
```swift
|
|
import Sessions
|
|
|
|
let session = try req.assertSession()
|
|
print(session.data)
|
|
```
|
|
|
|
## Example
|
|
|
|
Let's create an example that remembers the user's name.
|
|
|
|
### Store
|
|
|
|
```swift
|
|
drop.post("remember") { req in
|
|
guard let name = req.data["name"]?.string else {
|
|
throw Abort(.badRequest)
|
|
}
|
|
|
|
let session = try req.assertSession()
|
|
try session.data.set("name", name)
|
|
|
|
return "Remebered name."
|
|
}
|
|
```
|
|
|
|
On `POST /remember`, fetch a `name` from the request input, then store this name into the session data.
|
|
|
|
### Fetch
|
|
|
|
On `GET /remember`, fetch the `name` from the session data and return it.
|
|
|
|
```swift
|
|
drop.get("remember") { req in
|
|
let session = try req.assertSession()
|
|
|
|
guard let name = session.data["name"]?.string else {
|
|
return throw Abort(.badRequest, reason: "Please POST the name first.")
|
|
}
|
|
|
|
return name
|
|
}
|
|
```
|
|
|
|
## Cookie
|
|
|
|
The session will be stored using the `vapor-session` cookie.
|