@@ -31,7 +31,7 @@ shards install
3131
3232## 🚀 Quick Start
3333
34- ### 1. Basic Session Usage
34+ ### 1. Basic Session Usage (User Login / Logout)
3535
3636``` crystal
3737require "kemal"
@@ -40,28 +40,32 @@ require "kemal-session"
4040# Session Configuration
4141Kemal::Session.config.secret = "my-secret-key"
4242
43- # Store data in session
44- get "/login" do |env|
45- env.session.string("username", "alice")
46- env.session.int("user_id", 123)
47- "Welcome! You're now logged in."
43+ # User login (create session)
44+ post "/login" do |env|
45+ username = env.params.body["username"]?.to_s
46+
47+ # In a real app you would authenticate here
48+ env.session.string("username", username)
49+ env.session.bool("logged_in", true)
50+
51+ "Welcome #{username}, you're now logged in."
4852end
4953
50- # Retrieve data from session
54+ # Protected route using session
5155get "/profile" do |env|
56+ unless env.session.bool?("logged_in")
57+ env.response.status_code = 401
58+ next "Please log in first"
59+ end
60+
5261 username = env.session.string("username")
53- user_id = env.session.int("user_id")
54-
55- "Hello #{username}! Your ID is #{user_id}"
62+ "Hello #{username}!"
5663end
5764
58- # Optional values (returns nil if not found)
59- get "/dashboard" do |env|
60- last_visit = env.session.string?("last_visit")
61- message = last_visit ? "Welcome back! Last visit: #{last_visit}" : "First time here!"
62-
63- env.session.string("last_visit", Time.utc.to_s)
64- message
65+ # User logout (destroy session)
66+ post "/logout" do |env|
67+ env.session.destroy
68+ "You have been logged out."
6569end
6670
6771Kemal.run
0 commit comments