title: Sessions variables in golang not saved while using gorilla sessions
body: <p>Session Variables are not maintained across request while using gorilla sessions web toolkit.
  When  I start the server and type localhost:8100/ page is directed to login.html since session values do not exist.After I login I set the session variable in the store and the page is redirected to home.html. But when I open a new tab and type localhost:8100/ the page should be directed to home.html using already stored session variables, but the page is instead redirected to login.html.
  Following is the code.</p>
  
  <pre><code>    package main
  
  import (
      "crypto/md5"
      "encoding/hex"
      "fmt"
      "github.com/gocql/gocql"
      "github.com/gorilla/mux"
      "github.com/gorilla/sessions"
      "net/http"
      "time"
  )
  
  var store = sessions.NewCookieStore([]byte("something-very-secret"))
  
  var router = mux.NewRouter()
  
  func init() {
  
      store.Options = &amp;sessions.Options{
          Domain:   "localhost",
          Path:     "/",
          MaxAge:   3600 * 1, // 1 hour
          HttpOnly: true,
      }
  }
  func main() {
      //session handling
      router.HandleFunc("/", SessionHandler)
      router.HandleFunc("/signIn", SignInHandler)
      router.HandleFunc("/signUp", SignUpHandler)
      router.HandleFunc("/logOut", LogOutHandler)
      http.Handle("/", router)
      http.ListenAndServe(":8100", nil)
  }
  
  //handler for signIn
  func SignInHandler(res http.ResponseWriter, req *http.Request) {
  
      email := req.FormValue("email")
      password := req.FormValue("password")
  
      //Generate hash of password
      hasher := md5.New()
      hasher.Write([]byte(password))
      encrypted_password := hex.EncodeToString(hasher.Sum(nil))
  
      //cassandra connection
      cluster := gocql.NewCluster("localhost")
      cluster.Keyspace = "gbuy"
      cluster.DefaultPort = 9042
      cluster.Consistency = gocql.Quorum
      session, _ := cluster.CreateSession()
      defer session.Close()
  
      //select query
      var firstname string
      stmt := "SELECT firstname FROM USER WHERE email= '" + email + "' and password ='" + encrypted_password + "';"
      err := session.Query(stmt).Scan(&amp;firstname)
      if err != nil {
          fmt.Fprintf(res, "failed")
      } else {
          if firstname == "" {
              fmt.Fprintf(res, "failed")
          } else {
              fmt.Fprintf(res, firstname)
          }
      }
  
      //store in session variable
      sessionNew, _ := store.Get(req, "loginSession")
  
      // Set some session values.
      sessionNew.Values["email"] = email
      sessionNew.Values["name"] = firstname
  
      // Save it.
      sessionNew.Save(req, res)
      //store.Save(req,res,sessionNew)
  
      fmt.Println("Session after logging:")
      fmt.Println(sessionNew)
  
  }
  
  //handler for signUp
  func SignUpHandler(res http.ResponseWriter, req *http.Request) {
  
      fName := req.FormValue("fName")
      lName := req.FormValue("lName")
      email := req.FormValue("email")
      password := req.FormValue("passwd")
      birthdate := req.FormValue("date")
      city := req.FormValue("city")
      gender := req.FormValue("gender")
  
      //Get current timestamp and format it.
      sysdate := time.Now().Format("2006-01-02 15:04:05-0700")
  
      //Generate hash of password
      hasher := md5.New()
      hasher.Write([]byte(password))
      encrypted_password := hex.EncodeToString(hasher.Sum(nil))
  
      //cassandra connection
      cluster := gocql.NewCluster("localhost")
      cluster.Keyspace = "gbuy"
      cluster.DefaultPort = 9042
      cluster.Consistency = gocql.Quorum
      session, _ := cluster.CreateSession()
      defer session.Close()
  
      //Insert the data into the Table
      stmt := "INSERT INTO USER (email,firstname,lastname,birthdate,city,gender,password,creation_date) VALUES ('" + email + "','" + fName + "','" + lName + "','" + birthdate + "','" + city + "','" + gender + "','" + encrypted_password + "','" + sysdate + "');"
      fmt.Println(stmt)
      err := session.Query(stmt).Exec()
      if err != nil {
          fmt.Fprintf(res, "failed")
      } else {
          fmt.Fprintf(res, fName)
      }
  }
  
  //handler for logOut
  func LogOutHandler(res http.ResponseWriter, req *http.Request) {
      sessionOld, err := store.Get(req, "loginSession")
  
      fmt.Println("Session in logout")
      fmt.Println(sessionOld)
      if err = sessionOld.Save(req, res); err != nil {
          fmt.Println("Error saving session: %v", err)
      }
  }
  
  //handler for Session
  func SessionHandler(res http.ResponseWriter, req *http.Request) {
  
      router.PathPrefix("/").Handler(http.FileServer(http.Dir("../static/")))
      session, _ := store.Get(req, "loginSession")
  
      fmt.Println("Session in SessionHandler")
      fmt.Println(session)
  
  
      if val, ok := session.Values["email"].(string); ok {
          // if val is a string
          switch val {
          case "": {
              http.Redirect(res, req, "html/login.html", http.StatusFound) }
          default:
              http.Redirect(res, req, "html/home.html", http.StatusFound)
          }
      } else {
          // if val is not a string type
          http.Redirect(res, req, "html/login.html", http.StatusFound)
      }
  }
  </code></pre>
  
  <p>Can somebody tell me what I am doing wrong. Thanks in advance.</p>