1. 程式人生 > >Centos7 minimal 系列之Redis共享sessionid(七)

Centos7 minimal 系列之Redis共享sessionid(七)

image strings 系列 sha edi esp get blog 用戶

這一章節的內容就當看看,只是個人理解,我想應該是有誤的。

一、SessionId

  sessionid是一個會話的key,瀏覽器第一次訪問服務器會在服務器端生成一個session,有一個sessionid和它對應。

二、問題和理解

  在分布式中實現sessionid共享,自己胡亂琢磨。我這麽理解的,通過sessionid作為鍵,用戶信息或者其他信息為值,保存的redis中。

  發現在nginx代理之後,每次的sessionid不需要做任何設置就是相同的。是不是訪問的代理地址?從而不需要做其他設置?、

  在網上有說通過cookie保存sessionid,然後獲取sessionid和redis中做對比,沒有的情況做什麽,有的情況做什麽,但是負載均衡之後貌似都

  不需要cookie來保存這個了。每次直接可以獲取到sesseionid而且還是一樣的。

  HttpContext.Session.SessionID;

  技術分享圖片

三、保存在redis中

   public ActionResult Index()
        {
            ViewBag.ss = HttpContext.Session.SessionID;
            RedisManager redis = new RedisManager();
            TimeSpan ts0 = new TimeSpan(0, 0, 50);
            redis.StringSet(HttpContext.Session.SessionID, "dirk", ts0);
            ViewBag.sss = redis.StringGet(HttpContext.Session.SessionID);
            return View();
        }


  public IDatabase getRedisContext()
        {
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("168.33.162.245:7001,168.33.162.245:7001,168.33.162.245:7002,168.33.162.245:7003,168.33.162.245:7004,168.33.162.245:7005,168.33.162.245:7006");
            IDatabase db = redis.GetDatabase();
            return db;
        }

        public void StringSet(string key, string value, TimeSpan timeout)
        {
            IDatabase db = getRedisContext();
            bool res = db.StringSet(key, value, timeout);
        }

技術分享圖片

Centos7 minimal 系列之Redis共享sessionid(七)