asp.net使自定义角色提供程序授权的行为类似于自定义成员资格提供程序身份验证在到期时的行为

问题描述

| 我的表单身份验证工作正常,有效期为3个月,cookie设置为:
FormsAuthentication.Initialize();
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1,this.txtUsername.Text,DateTime.Now,DateTime.Now.AddMonths(3),true,string.Empty);
因此,即使重新启动了IIS或进行了项目重建,用户仍然可以通过身份验证,直到他选择注销我们过去的3个月为止。 至于自定义角色提供者[授权部分],当用户登录isValid()时,我添加了会话变量:
HttpContext.Current.Session.Add(\"userinfo\",userInfo);
但是据我们所知,会话在web.config更改,项目构建,IIS重新启动或认情况下经过20分钟后会过期。 我想要做的就是使系统保存Session [\“ userinfo \”]与身份验证[cookie]相同,但是当然不用在cookie中设置userinfo,因为即使userId被认为是安全隐患,它也不安全。曲奇饼! 那么如何实现呢?我以为将用户ID存储在Cookie中,但已加密,然后如果我发现会话已过期,但用户仍通过身份验证,我会从数据库中重新加载userInfo,但这种方法是否足够好或可用?以及如何将userInfo存储在上述代码段的authTicked中的(string.Empty)中,以后可以访问并且如何使用它?     

解决方法

        好的,听起来没有人回应!所以我选择将userId存储在身份验证票证的用户数据部分中:
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1,this.txtUsername.Text,DateTime.Now,DateTime.Now.AddMonths(3),true,UserInfo.UserId.ToString());
然后,当我需要检查userInfo时,请使用以下属性:
public UserInformation UserInfo
    {
        get
        {
            if (Session[\"userinfo\"] == null)
            {
                FormsIdentity id = (FormsIdentity)User.Identity;
                FormsAuthenticationTicket ticket = id.Ticket;
                long userId = Convert.ToInt64(ticket.UserData);
                Session[\"userinfo\"]=new MySqlMembershipProvider().LoadUserInfo(userId);
            }
            return (UserInformation)Session[\"userinfo\"];
        }
    }
就这样。我想到了配置文件提供者,但我不喜欢从数据库[9个表结构]中获取用户权限,然后将它们重新存储在会话表中的记录下(就像在您自己周围循环),如果用户有权限或偏好,更新了更多的数据库命中所需!