1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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, `<a href="/logout">logout</a>`)
- fmt.Fprintln(w, "Welcome, "+session.Value)
- } else {
- fmt.Fprintln(w, `<a href="/login">login</a>`)
- 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)
- }
|