Mein Projekt hat ein Problem bei der Erneuerung der Formularauthentifizierungssitzung aufgrund von widersprüchlichen Formularauthentifizierungs-Cookies.Formularauthentifizierungserneuerung Problem mit benutzerdefinierter Formularauthentifizierung
Detaillierte Beschreibung:
Nachdem ein Benutzer angemeldet ist, bildet ein Auth-Cookie (FACookieA) erstellt, und sie/er authentifiziert ist. Wenn es jedoch darum geht, den Cookie zu erneuern, wird ein zweiter Authentifizierungs-Cookie (FACookieB) erstellt, und FACookieA wird nicht erneuert. Der Benutzer wird nach Ablauf der Ablaufzeit in FACookieA zur Anmeldeseite auf Seitenanforderung umgeleitet, auch wenn es vor Ablauf der Ablaufzeit in FACookieB ist.
generiert Cookies:
Bitte beachten Sie, dass beide Cookies den gleichen Namen haben.
FACookieA: ""
name: FormsAuth
domain: .formsauth.com
bitte die beachten vorgehängten von .NET ist die "formsauth.com" von Formularauthentifizierung Ticket Abschnitt
FACookieB:
name: FormsAuth
host: a.formsauth.com
beachten Sie bitte die Cookie verwendet "host", nicht die Domäne und „ein. formsauth.com "basiert auf der aktuellen Anfrage-URL-Domain.
url Projekt getestet:
a.formsauth.com
Web.config:
<forms loginUrl="~/Account/Login.aspx" name="FormsAuth"/>
-Code
public partial class Account_Login : System.Web.UI.Page
{
protected void LoginButton_Click(object sender, EventArgs e)
{
if (Membership.ValidateUser(LoginUser.UserName.Trim(), LoginUser.Password.Trim()))
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
"username",
DateTime.Now,
DateTime.Now.AddMinutes(2),
false,
string.Empty
);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.Domain = "formsauth.com";
cookie.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Remove(cookie.Name);
Response.Cookies.Add(cookie);
Response.Redirect("~/Account/ChangePassword.aspx"); //authenticated area
}else
{
Response.Write("Invalid UserID and Password");
}
}
}
Fragen:
1) Wie generiere ich eine Formsauth Cookie, so dass Benutzer Formulare Auth Session erneuern können und nicht abgemeldet werden?
Überlegungen:
1) Das Projekt muss mehrere Sprachen, mit möglichen Domain-Formate unten unterstützen:
a.formsauth.com
a.en.formsauth.com
a.us.formsauth.com
und
b.formsauth.com
b.en.formsauth.com
b.us.formsauth.com
So kann ich nicht setzen Sie die Domain Attribut des Forms-Elements deklarativ. Da zwei Gruppen von Domains keine Cookies teilen können, ist das Teilen von Cookies innerhalb einer Gruppe erlaubt. Das ist die gleiche Codebasis für verschiedene Apps mit unterschiedlichen Domains. Aber eine Gruppe von Domains kann Cookies teilen.
2) Das integrierte Standard-FormsAuthenticationModule erneuert den Benutzersitzungscookie, weshalb ich keine Kontrolle über die Domäne im Cookie habe. Beachten Sie, dass FormsAuthenticationTicket zum Erstellen von Cookies bei der Verwendung verwendet wird, wie oben gezeigt.
Irgendeine Idee?
Bitte senden Sie den Code, der das Cookie aktualisiert – Mike
haben Sie 'Cookie gesetzt. Domain = "formsauth.com"; 'wenn Sie den Cookie aktualisieren? –
Ich kann mich nicht mehr so gut an ASP.NET Forms Auth erinnern, also funktioniert das vielleicht gar nicht mit Ihrer Implementierung, aber haben Sie versucht, 'slidingExpiration =" true "cookieless =" UseCookies "timeout =" x "' in ' hinzuzufügen 'in deiner web.config? "x" ist die Zeit in Minuten der Inaktivität, bevor sich der Benutzer erneut anmelden muss. –