如何让asp.net登录控件自动验证以前认证的用户?

时间:2008-10-03 01:22:00

标签: asp.net authentication cookies login controls

我正在尝试设置登录控件以记住之前已成功输入用户名和密码的用户的登录凭据。我将remember me属性设置为true,但它似乎没有任何可以读取cookie并自动登录用户的事件。

是否有直接的机制来实现这一目标?

1 个答案:

答案 0 :(得分:5)

您需要使用Google Forms Authentication in ASP.NET 2.0

您需要设置应用程序(通过web.config),还可能需要更改IIS设置。虽然它很简单,但可以使用大量设置,所以最好阅读一些文章。 ScottGu有一个 blog entry可以提供很多细节。

www.asp.net还有许多好视频,包括这些Security Tutorials

尝试How to: Create an ASP.NET Login PageWalkthrough: Creating a Web Site with Membership and User Login。如果我记得,除非您使用Sql Server Membership提供程序,否则您仍需要自己进行身份验证。在这种情况下,您仍然需要设置数据库和web.config。


基本上,一旦正确设置了配置,就会有一个登录页面。在该登录页面中,您告诉Forms Authentication在对其进行身份验证后为您创建身份验证票证:

if (VerifyUser(name, password) ) // this is not a framework method
    FormsAuthentication.RedirectFromLoginPage(
        userName, false); // no persistent cookie

如果要读取身份验证票据数据(来自其他任何地方)。

// output just writes to a StringBuilder 'sb' 
output(sb, "Identity.AuthenticationType", Page.User.Identity.AuthenticationType);

FormsIdentity fi = Page.User.Identity as FormsIdentity;
if (fi == null)
{
    output(sb, "Identity Type", Page.User.Identity.ToString());
    return;
}

output(sb, "FormsIdentity.Ticket.IssueDate", fi.Ticket.IssueDate);
output(sb, "FormsIdentity.Ticket.Expiration", fi.Ticket.Expiration);
output(sb, "FormsIdentity.Ticket.Name", fi.Ticket.Name);
output(sb, "FormsIdentity.Ticket.CookiePath", fi.Ticket.CookiePath);
output(sb, "FormsIdentity.Ticket.UserData", fi.Ticket.UserData);
output(sb, "FormsIdentity.Ticket.Version", fi.Ticket.Version);
output(sb, "FormsIdentity.Ticket.IsPersistent", fi.Ticket.IsPersistent);

关键是,一旦通过身份验证,如果身份验证票证已过期并且用户位于受保护的页面上,asp.net将仅将用户重定向到登录页面。 Asp.net不会一直要求您不必要地对用户进行身份验证。