コード例 #1
0
ファイル: BaseHandler.cs プロジェクト: yunjoker/Scut
 /// <summary>
 /// 
 /// </summary>
 /// <param name="userId"></param>
 /// <param name="passportId"></param>
 /// <returns></returns>
 protected ResponseData AuthorizeLogin(int userId, string passportId)
 {
     UserToken userToken = new UserToken()
     {
         Token = GenrateToken(),
         UserId = userId,
         PassportId = passportId,
         ExpireTime = DateTime.Now.AddDays(1)
     };
     HandlerManager.SaveToken(userToken.Token, userToken);
     return new LoginToken()
     {
         Token = userToken.Token,
         UserId = userToken.UserId,
         PassportId = userToken.PassportId
     };
 }
コード例 #2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="key"></param>
        /// <param name="userToken"></param>
        public static void SaveToken(string key, UserToken userToken)
        {
            string userKey = string.Format("{0}:{1}", AccountServerToken, userToken.UserId);
            string redisKey = string.Format("{0}@{1}", AccountServerToken, key);
            if (!string.IsNullOrEmpty(RedisHost) && RedisConnected)
            {
                try
                {
                    string script = @"
local redisKey = KEYS[1]
local userKey = KEYS[2]
local key = KEYS[3]
local timeout = ARGV[1]
local val = ARGV[2]
local oldToken = redis.call('Get', userKey)
if oldToken and oldToken ~= nil then
    local k =  '__AccountToken@'..oldToken
    redis.call('del', k)
end
redis.call('Set', redisKey, val, 'EX', timeout)
redis.call('Set', userKey, key, 'EX', timeout)
return 0
";
                    //use redis cache.
                    RedisConnectionPool.Process(client =>
                    {
                        int timeout = (int)(userToken.ExpireTime - DateTime.Now).TotalSeconds;
                        client.ExecLuaAsInt(script, new[] { redisKey, userKey, key }, new[] { timeout.ToString(), MathUtils.ToJson(userToken) });
                    });
                }
                catch (Exception ex)
                {
                    TraceLog.WriteError("Save token errror:{0}", ex);
                }
                return;
            }
            if (HttpContext.Current != null && HttpContext.Current.Cache != null)
            {
                var cache = HttpContext.Current.Cache;
                var oldToken = cache[userKey] as string;
                if (!string.IsNullOrEmpty(oldToken))
                {
                    cache.Remove(string.Format("{0}@{1}", AccountServerToken, oldToken));
                }
                cache[redisKey] = userToken;
                cache[userKey] = key;
            }
            else
            {
                string oldToken;
                if (userHashCache.TryGetValue(userToken.UserId, out oldToken))
                {
                    UserToken temp;
                    userTokenCache.TryRemove(oldToken, out temp);
                }
                userTokenCache[key] = userToken;
            }
        }
コード例 #3
0
ファイル: HandlerManager.cs プロジェクト: yunjoker/Scut
 /// <summary>
 /// 
 /// </summary>
 /// <param name="key"></param>
 /// <param name="userToken"></param>
 public static void SaveToken(string key, UserToken userToken)
 {
     string userKey = string.Format("{0}:{1}", AccountServerToken, userToken.UserId);
     string redisKey = string.Format("{0}@{1}", AccountServerToken, key);
     if (!string.IsNullOrEmpty(RedisHost) && RedisConnected)
     {
         //use redis cache.
         RedisConnectionPool.Process(client =>
         {
             string oldToken = client.Get<string>(userKey);
             if (!string.IsNullOrEmpty(oldToken))
             {
                 client.Remove(string.Format("{0}@{1}", AccountServerToken, oldToken));
             }
             client.Set(redisKey, userToken, userToken.ExpireTime);
             client.Set(userKey, key, userToken.ExpireTime);
         });
         return;
     }
     if (HttpContext.Current != null && HttpContext.Current.Cache != null)
     {
         var cache = HttpContext.Current.Cache;
         var oldToken = cache[userKey] as string;
         if (!string.IsNullOrEmpty(oldToken))
         {
             cache.Remove(string.Format("{0}@{1}", AccountServerToken, oldToken));
         }
         cache[redisKey] = userToken;
         cache[userKey] = key;
     }
     else
     {
         string oldToken;
         if (userHashCache.TryGetValue(userToken.UserId, out oldToken))
         {
             UserToken temp;
             userTokenCache.TryRemove(oldToken, out temp);
         }
         userTokenCache[key] = userToken;
     }
 }