El tiempo de espera de parámetros que ha encontrado en /system.web/authentication/forms
es el tiempo de espera (en minutos) de la duración del ticket de autenticación.
Esto significa que después de un cierto período de inactividad, se solicita al usuario que inicie sesión de nuevo. Si intentas marcar My.Profile.Current.IsAuthenticated
, será false
.
Puede optar por no conservar la cookie. En esta situación, si su boleto expira, su cookie caduca también. La cookie (en caso de que persista) tiene el propósito de recordar al usuario si vuelve a su sitio.
Es posible que desee conservar su cookie durante 10 años para que el usuario nunca tenga que volver a insertar el nombre de usuario y la contraseña, a menos que haya elegido eliminar la cookie. La cookie es válida incluso si el navegador está cerrado (cuando se conserva).
Otra cosa importante a recordar es la slidingExpiration parámetro:
<authentication mode="Forms">
<forms loginUrl="~/Partner/LogOn" defaultUrl="~/Home/Index"
timeout="30" slidingExpiration="true" />
</authentication>
si es verdad que su vale de autenticación se renueva cada vez que hay actividad en su sitio: actualización de la página, etc.
Lo que puede hacer - y lo que he hecho - es escribir su propia cookie de la siguiente manera:
FormsAuthenticationTicket authTicket = new
FormsAuthenticationTicket(1, //version
userName, // user name
DateTime.Now, //creation
DateTime.Now.AddMinutes(30), //Expiration (you can set it to 1 month
true, //Persistent
userData); // additional informations
actualización
He aplicado esta causa rutina Quiero guardar mis grupos en una cookie cifrada:
Dim authTicket As System.Web.Security.FormsAuthenticationTicket = _
New System.Web.Security.FormsAuthenticationTicket(_
1, _
UserName, _
Now, _
Now.AddYears(100), _
createPersistentCookie, _
UserData)
Dim encryptedTicket As String = System.Web.Security.FormsAuthentication.Encrypt(authTicket)
Dim authCookie As HttpCookie = New HttpCookie(_
System.Web.Security.FormsAuthentication.FormsCookieName, _
encryptedTicket)
If (createPersistentCookie) Then
authCookie.Expires = authTicket.Expiration
End If
Response.Cookies.Add(authCookie)
Como se puede ver que he puesto a la expiración de la cookie de autenticación y el vale de autenticación con el mismo tiempo de espera (solo cuando persiste).
Otra cosa que he intentado es almacenar el nombre de usuario y la contraseña en la cookie cifrada. Cada vez que se carga una página maestra, compruebo My.Profile.Current.IsAuthenticated para ver si la autenticación sigue siendo válida.Si no leí la cookie de nuevo, obtener el nombre de usuario y contraseña, y comprobar que en el DB:
Public Function ReadCookieAuthentication(ByVal Context As System.Web.HttpContext) As Security.CookieAuth
Dim CookieUserData = New Security.CookieAuth()
Dim cookieName As String = System.Web.Security.FormsAuthentication.FormsCookieName
Dim authCookie As HttpCookie = Context.Request.Cookies(cookieName)
If (Not (authCookie Is Nothing)) Then
Dim authTicket As System.Web.Security.FormsAuthenticationTicket = Nothing
Try
authTicket = System.Web.Security.FormsAuthentication.Decrypt(authCookie.Value)
If (Not (authTicket Is Nothing)) Then
If (authTicket.UserData IsNot Nothing) AndAlso Not String.IsNullOrEmpty(authTicket.UserData) Then
CookieUserData = New JavaScriptSerializer().Deserialize(Of Security.CookieAuth)(authTicket.UserData.ToString)
End If
CookieUserData.UserName = authTicket.Name
End If
Catch ex As Exception
' Do nothing.
End Try
End If
Return (CookieUserData)
End Function
Security.CookieAuth es un objeto que he creado para devolver nombre de usuario y contraseña.
CookieUserData es el almacenamiento (guardo en formato json) donde pongo mi contraseña y mis grupos.
Hola, lo siento, sé que esto ha sido demasiado viejo, pero solo curiosidad, ¿por qué almacenarlo en formato json? la contraseña y grupos soy muy nuevo en mvc, así que sigo intentando comprender los conceptos y las mejores prácticas para desarrollarlo. gracias! – gdubs
@gdubs: Sí, lo sé. Es un poco inusual. Pude haber elegido otro formato, pero me gusta JSON. Además, con MVC tiende a usar JSON bastante, así que lo he adoptado como estándar. – LeftyX