public static AdminInfo LoggedAdminInfo; 
 public AdminInfo Login(string userName, string password)
        {
            try
            {
                LoggedAdminInfo=
                _dataHelper.Login(userName, password);
                return LoggedAdminInfo;
            }
            catch (Exception e)
            {
                LogWriter.Default.WriteError(e);
                return null;
            }
        }你这里设置的LoggedAdminInfo对象是个全局对象 每当客户端调用Login的时候 就给赋予了新的值,当你第二个账户登陆的时候服务端的LoggedAdminInfo已经变成了第二个登录用户的了 当然你刷新在取这个值肯定成第二个用户的值了

解决方案 »

  1.   

    要改造这个 从public static AdminInfo LoggedAdminInfo;这里入手 ,我不是很明白为嘛要在服务端保存一个静态的登录用户的常量?你是多用户登录的,又不是只允许一个用户使用,这是干什么的
      

  2.   

    你登录方法是返回了一个登录用户信息的,既然都返回了,你刷新还取到最后一次登录用户信息说明你在客户端刷新的时候就取了服务端的常量LoggedAdminInfo的值呗,你应该在客户端首次登录后就把用户信心Down到本地之后保存成全局变量,之后不论是刷新还是任何操作都是取客户端的信息才能够,因为你服务端的LoggedAdminInfo是不可控的亲
      

  3.   

    用于权限判断呀,因为存在多级权限,  try
                { 
                    
                    List<IdcInfo> idcInfos = new List<IdcInfo>();                  AdminInfo currentUser = AdminService.LoggedAdminInfo;///获得当前用户信息
                    if (currentUser == null)
                        return idcInfos;
                    if (idcInfo == null || idcInfo.Count == 0)
                        return idcInfos;
                    AdminService AdminInfoSync = new AdminService();                var admins = AdminInfoSync.GetAdmins();
                    if (admins == null || admins.Count == 0)
                    {
                        LogWriter.Default.WriteError("Get Admin list failed, So can not filter IdcInfo.");
                        return null;
                    }
                    List<AdminRole> roles = AdminInfoSync.GetRoles();
                    if (!roles.Any())
                        return idcInfo;
                    AdminRole role = roles.Where(x => x.Id == currentUser.RoleId).FirstOrDefault();
                    List<AdminDataLimits> limits = AdminInfoSync.GetAdminDataLimits();
                    if (!limits.Any())
                    return idcInfo;
                    var currentLimits = limits.Where(x => x.AdminId == currentUser.Id).ToList();
                    List<string> dataLimitsStringArr = new List<string>();
                    currentLimits.ForEach(x =>
                    {
                        string[] limitStrings = x.DataLimits.Split(',');
                        foreach (var s in limitStrings)
                        {
                            dataLimitsStringArr.Add(s);
                        }
                    });
                    idcInfo.ForEach(x =>
                    {
                        var opAdmin = admins.FirstOrDefault(a => a.Account == x.Operator);
                        if (opAdmin == null)//IDC所属管理员已经不存在
                        {
                            if (role.RoleName == "超级管理员")//并且当前登录用户不是超级管理员
                                idcInfos.Add(x);
                        }
                        else//IDC所属管理员存在
                        {
                            if (dataLimitsStringArr.Contains(opAdmin.Id.ToString()))//当前登录用户是否有查看此数据的权限。有的话就把当前用户数据给添加进集合
                                idcInfos.Add(x);
                        }
                    });
                    return idcInfos;
                }
                catch (Exception e)
                {
                    LogWriter.Default.WriteError(string.Format("Filter IdcInfo occur error; {0}", e));
                    return null;
                }
      

  4.   

    他保存的是最后一个调用过Login方法的用户吧,我估么着他刷新的时候去取了服务器这个变量的值了
      

  5.   

    他保存的是最后一个调用过Login方法的用户吧,我估么着他刷新的时候去取了服务器这个变量的值了嗯是调用了LOGIN方法,那应该现在应该用什么方法来解决呢,是不是在登录的时候都记录登录的用户信息,等在查询数据操作的时候在来调用客户端存储的用户信息,不用静态变量对象来保存?
      

  6.   

    他保存的是最后一个调用过Login方法的用户吧,我估么着他刷新的时候去取了服务器这个变量的值了嗯是调用了LOGIN方法,那应该现在应该用什么方法来解决呢,是不是在登录的时候都记录登录的用户信息,等在查询数据操作的时候在来调用客户端存储的用户信息,不用静态变量对象来保存?
    这个看需求吧,个人建议可以在用户上加安全令牌登录成功后分发给客户端一个安全令牌(保存为客户端的常量),然后需要取数据的时候,客户端用安全令牌去访问服务端的相关方法,这样服务端就只需要对安全令牌进行管理,代码维护也方便了
      

  7.   


    你可以baidu下 sso 令牌
      

  8.   


    你可以baidu下 sso 令牌单点登录呀,不太明白?求一个DEMO