Red.CookieSessions
1.1.0
See the version list below for details.
dotnet add package Red.CookieSessions --version 1.1.0
NuGet\Install-Package Red.CookieSessions -Version 1.1.0
<PackageReference Include="Red.CookieSessions" Version="1.1.0" />
paket add Red.CookieSessions --version 1.1.0
#r "nuget: Red.CookieSessions, 1.1.0"
// Install Red.CookieSessions as a Cake Addin #addin nuget:?package=Red.CookieSessions&version=1.1.0 // Install Red.CookieSessions as a Cake Tool #tool nuget:?package=Red.CookieSessions&version=1.1.0
Cookie Sessions for RedHttpServer
Simple session management middleware for Red.
Usage
After installing and referencing this library, the Red.Request
has the extension methods OpenSession(sessionData)
and GetSession()
.
OpenSession(sessionData)
will open a new session and add a header to the response associated with the request.
GetSession<TSession>()
will return the CookieSession
object wrapping the TSession
-data, which has two methods: Renew()
and Close()
, and the field Data
, which holds the session-data object
Example
class MySession
{
public string Username;
}
...
server.Use(new CookieSessions<MySession>(new CookieSessionSettings(TimeSpan.FromDays(1))
{ // We allow unauthenticated users to send requests to /login, so we can authenticate them
Excluded = { "/login" }
}));
server.Post("/login", async (req, res) =>
{
var form = await res.GetFormDataAsync();
if (ValidForm(form) && Authenticate(form["username"], form["password"]))
{
req.OpenSession(new MySession {Username = form["username"]}); // Here we just have the username as session-data
await res.SendStatus(HttpStatusCode.OK);
}
else
await res.SendStatus(HttpStatusCode.BadRequest);
});
// Only authenticated users are allowed to /friends
server.Get("/friends", async (req, res) =>
{
var session = req.GetSession<MySession>();
var friends = database.GetFriendsOfUser(session.Username);
await res.SendJson(friends);
});
server.Post("/logout", async (req, res) =>
{
req.GetSession<MySession>().Close();
await res.SendStatus(HttpStatusCode.OK);
});
Implementation
OpenSession
will open a new session and attach a Set-Cookie
header to the associated response.
This header's value contains the token used for authentication.
The token is generated using the RandomNumberGenerator
from System.Security.Cryptography
,
so it shouldn't be too easy to "guess" other tokens, even with knowledge of some tokens.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 is compatible. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
-
.NETCoreApp 2.0
- RHttpServer (>= 3.0.0)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Red.CookieSessions:
Package | Downloads |
---|---|
Red.CookieSessions.EFCore
A EntityFrameworkCore session store for Red.CookieSessions |
|
Red.CookieSessions.LiteDBStore
A LiteDB session store for Red.CookieSessions |
|
Red.CookieSessions.SQLiteStore
A SQLite session store for Red.CookieSessions, to persists sessions |
|
Red.CookieSessions.RedisStore
A Redis session store for Red.CookieSessions |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
5.1.0 | 2,167 | 2/22/2020 | |
5.0.0 | 2,901 | 1/3/2020 | |
4.1.0 | 2,995 | 9/29/2019 | |
4.0.1 | 1,631 | 9/29/2019 | |
4.0.0 | 727 | 9/29/2019 | |
3.1.0 | 1,147 | 5/16/2019 | |
3.0.2 | 1,289 | 4/30/2019 | |
3.0.1 | 1,312 | 3/10/2019 | |
3.0.0 | 837 | 3/10/2019 | |
2.2.0 | 985 | 1/9/2019 | |
2.1.1 | 993 | 9/12/2018 | |
2.1.0 | 960 | 9/12/2018 | |
2.0.0 | 1,254 | 6/26/2018 | |
1.3.0 | 1,149 | 5/20/2018 | |
1.2.1 | 1,123 | 5/19/2018 | |
1.2.0 | 1,136 | 5/19/2018 | |
1.1.0 | 1,306 | 4/20/2018 | |
1.0.0 | 1,166 | 3/26/2018 |
Is now using generics instead of just an object