当前位置:  开发笔记 > 编程语言 > 正文

asp.net mvc 3 - 设置全局用户数据

如何解决《asp.netmvc3-设置全局用户数据》经验,为你挑选了1个好方法。

如何通过页面设置保留名称,姓氏等信息的全局用户数据?如果我使用会话变量,它会在auth cookie之前到期

谢谢!



1> LukeP..:

您可以使用auth cookie中的userdata字段存储auth会话时间的数据.

下面的代码是默认MVC项目中AccountController的LogOn操作:

 [HttpPost]
 public ActionResult LogOn(LogOnModel model, string returnUrl)
 {
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }
    // If we got this far, something failed, redisplay form
    return View(model);
}

你可以替换:

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

有:

string fullName = "User full name";

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, model.Email, DateTime.Now,
                DateTime.Now.AddDays(2), model.RememberMe, fullName);

string encTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) { Expires = DateTime.Now.AddDays(2) });

如果您想存储的数据超过普通字符串的数据,则必须查看某种数据序列化程序.

然后,在使用auth cookie时,您必须实现一些解析序列化数据的东西.

数据可通过:

((FormsIdentity)User.Identity).Ticket.UserData;

希望有所帮助

编辑: 同时将DateTime.Now.AddDays(2)更改为您希望auth会话保持有效的任何内容.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有