# Session Cookie Authentication

sequenceDiagram
         participant User
         participant Browser
         participant Server
    
         User->>Browser: Enters Credentials (Email, Password)
         Browser->>Server: POST /login (Email, Password)
         Server->>Server: Validates Credentials
         Server->>Server: Generates Session ID
        Server->>Server: Stores Session Data (e.g., user email)
        Server-->>Browser: HTTP/1.1 200 OK (or 302 Redirect)
        Server-->>Browser: Set-Cookie: session=
        Browser->>Browser: Stores Session Cookie
        Browser->>Server: GET / (with session cookie)
        Server->>Server: Retrieves Session Data using Cookie
        Server-->>Browser: Renders Personalized Page
        Browser->>User: Displays Personalized Content
  1. User sends login request with credentials
curl -X POST http://localhost:5000/login -d "username=user&password=pass"
graph LR
user -->|Sends credentials| server
<form action="/login" method="POST">
  <h2>Login</h2>
  <input type="email" name="email" placeholder="Email" required />
  <input type="password" name="password" value="Password" required />
  <button type="submit">Login</button>
  <p>
	If you dont have an account
	<a href="#" onClick="toggleForm('register-form')"> Register Here</a>
  </p>
</form>

  1. Server validates credentials
@app.route("/login", methods=["POST"])
def login():
    email = request.form.get("email")
    password = request.form.get("password")
    user = users.get(email)
    if not user or not check_password_hash(user["password"], password):
        flash("Invalid credentials. Please try again.", "danger")
        return redirect(url_for("index"))

    flash(f'Welcome, {user["name"]}!', "success")
    session["email"] = user["email"]
    return redirect(url_for("index"))
email = request.form.get("email")
password = request.form.get("password")
user = users.get(email)
if not user or not check_password_hash(user["password"], password):
	flash("Invalid credentials. Please try again.", "danger")
	return redirect(url_for("index"))
return redirect(url_for("index"))
session["email"] = user["email"]