He encontrado algunas preguntas similares pero ninguno me dio lo que realmente necesita.

Aquí está la cosa, yo he añadido esto a mi web.config para controlar la sesión del usuario fecha de vencimiento:

<sessionState mode="InProc" timeout="1" />

Después de 1 minuto, el Session_End evento de Global.asax se plantea:

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
    Response.Redirect("Login.aspx")
End Sub

Esto no funciona, porque:

Response is not available in this context.

(Por cierto, esta pregunta tienes un anwswer diciendo que esto está bien y lo tengo upvotes).

No quiero nada de fantasía. Yo sólo quiero una simple manera de redirigir al usuario a la página de inicio de sesión cuando el tiempo de la sesión caduca. Eso es todo.

Gracias.

  • Trate De HttpContext.Actual.Respuesta.Redirect(«Inicio De Sesión.aspx»)
  • Si usted tiene el login correctamente registrado, el usuario debe ser redirigido a iniciar sesión con cualquier post. Como usuario, no quiero perder la página que estoy, porque la sesión se agotó.
  • Que no funciona demasiado @Tim. Gracias de todos modos.
  • ¿qué significa un «registrado correctamente» inicio de sesión?
  • No recuerdo todos los pasos pero seguro que mi aplicación de producción funciona de esa manera como puedo cargar los datos y mi inicio de sesión a menudo caduca. Si me envía a otra página y no pude ver si mi carga terminado no me gustaría que eso. En ASP.NET de que marca es como la página de inicio de sesión y no puede recordar si tuviera que también se marca en IIS. Recuerdo que tuve que marca el Defecto de la página, tanto en el ASP.NET proyecto y IIS.
  • Está usted usando MembershipServices? Si no, no la mente. O pensar en el uso de MemberShipServices.
  • Yo no lo soy. Gracias de todos modos.

InformationsquelleAutor gabsferreira | 2012-09-19

4 Comentarios

  1. 2

    Session_End es un del lado del servidor evento, lo que significa que se activa en el servidor web y no tiene nada que ver con una solicitud del cliente. Esta es la razón por la que la Solicitud no está disponible.

    Usted tiene dos opciones en esta materia:

    1. Sobre cada solicitud del cliente, comprobar si una determinada variable de Sesión se establece. Si es no, significa que la Sesión anterior ha caducado y el nuevo período de Sesiones, debe estar llena. (Estoy suponiendo que esta es la razón por la que usted desea comprobar la caducidad de Sesión)

    2. Tiene una llamada de javascript en el cliente que periódicamente vuelve al servidor para comprobar si la Sesión es válida todavía. Si la Sesión ha caducado, puede advertir al usuario de que su Sesión está a punto de expirar.

    HTH

    • Cuando usted hace la llamada al servidor desde el cliente con javascript o por cualquier medio, se renovará la sesión de siempre. Así, por encima de los enfoques no funcionará nunca.
    • No renovar de la sesión, se creará una nueva. Así que si su anterior período de sesiones había una marca establecida, el recién creado sesión no tienen el marcador.
    • No, por favor, ejecute el código y ver.
  2. 3

    Descripción

    Puede utilizar el Page_Initevento en el global.asax

    De la muestra

    Protected Sub Page_Init(sender As Object, e As EventArgs)
     If Context.Session IsNot Nothing Then
      If Session.IsNewSession Then
       Dim newSessionIdCookie As HttpCookie = Request.Cookies("ASP.NET_SessionId")
       If newSessionIdCookie IsNot Nothing Then
        Dim newSessionIdCookieValue As String = newSessionIdCookie.Value
        If newSessionIdCookieValue <> String.Empty Then
         ' This means Session was timed Out and New Session was started
         Response.Redirect("Login.aspx")
        End If
       End If
      End If
     End If
    End Sub

    Más Información

    • Bueno, he copiado este código a mi Mundial.asax y poner un punto de interrupción en él. Cuando finaliza la sesión, Session_End se eleva pero Page_Init no.
    • Sí, pero en la siguiente petición, el método llamado. El problema es que el servidor sabe que la sesión ha caducado, pero en el HTTP (que no es la conexión permanente), no se puede hacer algo con el cliente. Usted sólo puede hacer algo si el usuario hace una petición.
    • Si lo desea, puede mantener activa la sesión si usted hace una petición desde el cliente al servidor con javascript cada x segundos.
  3. 0

    De verificación para las sesiones expiradas en cada Page_Init evento. Si hay demasiadas páginas para hacer esta comprobación, esto es lo que suele hacer:

    • Puedo crear una clase base y heredan de System.Web.La interfaz de usuario.Página.
    • Escribir mi lógica de redirección en el Page_Init caso de mi clase base.
    • Tienen el resto de mis páginas heredar de esta clase base.

    Buena suerte.

  4. 0
    protected void Page_Init(object sender, EventArgs e)
    {
        if (Context.Session != null)
        {
            if (Session.IsNewSession)
            {
                HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"];
                if (newSessionIdCookie != null)
                {
                    string newSessionIdCookieValue = newSessionIdCookie.Value;
                    if (newSessionIdCookieValue != string.Empty)
                    {
                        // This means Session was timed Out and New Session was started
                        Response.Redirect("Login.aspx");
                    }
                }
            }
        }
    }
    • Se trata de la versión de C# de dknaack la respuesta

Dejar respuesta

Please enter your comment!
Please enter your name here