package main import ( "fmt" "net/http" "time" ) func mainPage(w http.ResponseWriter, r *http.Request) { session, err := r.Cookie("session_id") loggedIn := (err != http.ErrNoCookie) if loggedIn { fmt.Fprintln(w, `logout`) fmt.Fprintln(w, "Welcome, "+session.Value) } else { fmt.Fprintln(w, `login`) fmt.Fprintln(w, "You need to login") } } func loginPage(w http.ResponseWriter, r *http.Request) { expiration := time.Now().Add(10 * time.Hour) cookie := http.Cookie{ Name: "session_id", Value: "rvasily", Expires: expiration, } http.SetCookie(w, &cookie) http.Redirect(w, r, "/", http.StatusFound) } func logoutPage(w http.ResponseWriter, r *http.Request) { session, err := r.Cookie("session_id") if err == http.ErrNoCookie { http.Redirect(w, r, "/", http.StatusFound) return } session.Expires = time.Now().AddDate(0, 0, -1) http.SetCookie(w, session) http.Redirect(w, r, "/", http.StatusFound) } func main() { http.HandleFunc("/login", loginPage) http.HandleFunc("/logout", logoutPage) http.HandleFunc("/", mainPage) fmt.Println("starting server at :8080") http.ListenAndServe(":8080", nil) }