У меня есть сайт, который использует SqlMembershipProvider и FormsAuthentication по умолчанию. Я могу использовать встроенные средства контроля входа и / или программно вызывать все методы для проверки подлинности пользователя и получения того же результата - пользователь проходит проверку подлинности и создается файл cookie, но файл cookie выглядит недействительным, поскольку я могу не попасть на любую страницу, требующую аутентификации.
Нет реального кода для отображения по умолчанию для элемента управления входом в систему, поскольку он должен просто «работать», но вот пользовательский код, который я пробовал:
protected void ctrlLogin_Authenticate(object sender, AuthenticateEventArgs e)
{
if (Membership.ValidateUser(ctrlLogin.UserName, ctrlLogin.Password))
{
FormsAuthentication.RedirectFromLoginPage(ctrlLogin.UserName, ctrlLogin.RememberMeSet);
/*
* I also tried this:
FormsAuthentication.SetAuthCookie(ctrlLogin.UserName, ctrlLogin.RememberMeSet);
if (!String.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
Response.Redirect(Request.QueryString["ReturnUrl"]);
Response.Redirect("/index.aspx");
*/
}
else
{
ctrlLogin.FailureText = "Invalid Username/Password Combination";
}
}
С этим кодом Membership.ValidateUser () успешно , и оба FormsAuthentication.RedirectFromLoginPage () и FormsAuthentication.RedirectFromLoginPage () успешно установили cookie - этот cookie просто не может работать, чтобы проверить мою аутентификацию. Я подтвердил это, удалив все мои куки и наблюдая, как они снова создаются с помощью FireCookie. Имя файла cookie совпадает с тем, что есть в моем файле web.config, домен - «/», а срок действия - ожидаемый (см. Ниже).
Вот соответствующие разделы моего web.config:
<authentication mode="Forms">
<forms loginUrl="~/login/index.aspx" name=".SoeAuth" protection="All"
slidingExpiration="true" timeout="525599" domain=""></forms>
</authentication>
<membership defaultProvider="SqlMembershipProvider">
<providers>
<add connectionStringName="[MY_CS]" applicationName="[MY_APPNAME]"
minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0"
enablePasswordReset="true" passwordFormat="Hashed" requiresUniqueEmail="true"
name="SqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"
requiresQuestionAndAnswer="false"/>
</providers>
</membership>
Следует отметить, что я также добавил запись machineKey в свой файл web.config, основываясь на предложении очень похожий вопрос здесь (который не решил мою проблему). Также, для справки, указанное выше время ожидания = 525599 на 1 минуту меньше, чем для моих постоянных файлов cookie.