none
Evitar que se cierren todas sesiones abiertas cuando cierro una RRS feed

  • Pregunta

  • Hola.

    Tengo 3 formularios de inicio de sesión.

    Padres de familia, Estudiantes, Docentes.

    El problema es que si tengo abiertas las 3 sesiones abiertas en el mismo explorador  y cierro una de las sesiones se cierran todas, como hago para evitar esto.

    jueves, 22 de junio de 2017 4:33

Respuestas

  • Me imagino que cuando dices "sesion" no te refieres a la sesion de datos (Session[...]) sino a la sesion de login (User.Identity...). Siendo asi, lo que necesitas hacer para independizar las sesiones es cambiarles la cookie de sesion para que no sea la misma en las trea aplicaciones.

    Si estas usando el mecanismo standard de Membership para gerstionar el login, usando Forms Authentication desde el web.config, entonces la forma de configurar la cookie es un parametro opcional dentro de dicho .config:

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="Login.aspx"
               timeout="30"
               name=".ASPXAUTH" 
               path="/"
               requireSSL="false"
               ...etc... />
      </authentication>
    </system.web>
    

    Fijate en donde dice name="...". Ahi tienes que indicar un valor distinto para cada una de tus tres aplicaciones, en lugar de dejar que las tres usen el valor predeterminado. Revisa tambien el path y cerciorate de que cada aplicacion tiene el suyo.

    jueves, 22 de junio de 2017 8:19
  • Ah, eso es mucho más fácil. Lo hace el Grid normalito de ASP.NET. Simplemente configúrale las propiedades para activarle el botón de Editar y el de Grabar, y funciona todo automáticamente: Cuando pulsas Editar se te habilitan los textboxes en la línea, y cuando pulsas grabar se te dispara un evento en el servidor y te llegan todos los valores.

    Hay muchos ejemplos por la red, por ejemplo aquí tienes uno:

    http://www.c-sharpcorner.com/UploadFile/9f0ae2/gridview-edit-delete-and-update-in-Asp-Net/

    viernes, 23 de junio de 2017 19:32

Todas las respuestas

  • Me imagino que cuando dices "sesion" no te refieres a la sesion de datos (Session[...]) sino a la sesion de login (User.Identity...). Siendo asi, lo que necesitas hacer para independizar las sesiones es cambiarles la cookie de sesion para que no sea la misma en las trea aplicaciones.

    Si estas usando el mecanismo standard de Membership para gerstionar el login, usando Forms Authentication desde el web.config, entonces la forma de configurar la cookie es un parametro opcional dentro de dicho .config:

    <system.web>
      <authentication mode="Forms">
        <forms loginUrl="Login.aspx"
               timeout="30"
               name=".ASPXAUTH" 
               path="/"
               requireSSL="false"
               ...etc... />
      </authentication>
    </system.web>
    

    Fijate en donde dice name="...". Ahi tienes que indicar un valor distinto para cada una de tus tres aplicaciones, en lugar de dejar que las tres usen el valor predeterminado. Revisa tambien el path y cerciorate de que cada aplicacion tiene el suyo.

    jueves, 22 de junio de 2017 8:19
  • No entendí.

    Yo creo mis formularios de inicio de sesión y uso  el siguiente código 

    if (txtusuario.Text==txtcontraseña.Text.ToUpper())
                {
                    c_loginalumno objmatri = L_loginalumno.alumlogeado(txtusuario.Text, tipoaula);
                    if (objmatri != null)
                    {
                        Session["virtualumno"] = objmatri;                    
                        Response.Redirect("Virtuales/Principalvirtuales.aspx?idcursoalua=" + objmatri.C_curso.ToString());
                    }

    No uso ningún formulario de los que tiene asp

    tengo 3 formularios de inicio de sesión diferentes pero manejo un código similar . 

    jueves, 22 de junio de 2017 17:36
  • No entendí.

    Claro que no entendiste, es que no estás usando el mecanismo de Login de ASP.NET (que no tiene nada que ver con que uses ningún formulario de los que tiene, se puede implementar sobre tu propio formulario usando tus propios controles).

    En su lugar, resulta que estás simulando la sesión de login basándote en la sesión de datos (la que yo decía en mi mensaje que presumía que no estabas usando, porque no diste al principio ningún detalle sobre cómo lo estabas haciendo, por lo que era razonable presumir que estabas usando el estándar en lugar de haber "reinventado la rueda").

    El caso es que si tienes tres aplicaciones compartiendo el Session, y en las tres usas la misma variable Session["virtualumno"] para guardar el login, pues entonces en cuanto lo vacíes en una de las tres aplicaciones también se perderá en las otras. Tendrías que usar en cada una un valor distinto, tal como Session["padres"], Session["docentes"], etc. Y como es lógico, al cerrar sesión vaciar solo una de las variables, no todas ellas.

    No has dicho cómo "cierras sesión", pero si estás usando Session.Close o Session.Abandon, entonces se pierden TODAS las variables de sesión, así que no resolvemos nada. Recuerda cerrar sesión limpiando solo la variable que usas para uno de los logins, no la sesión entera, porque entonces se te pierden todas las sesiones.

    jueves, 22 de junio de 2017 20:25
  • No me he hecho entender.

    Yo tengo 3 formularios de inicio de sesión. cada formulario se registra en una variable des sesión diferente.

    Session["virtualumno"] = objmatri;    

    Session["Docentes"] = objdocente;    Session["padresdefamilia"] = objpadresf;    

    Session["Estudiantes"] = objalumno;    

    El problema esta es que si tengo las tres abiertas y cierro una de ellas, se cierran todas. 

    jueves, 22 de junio de 2017 21:48
  • Si claro yo uso para cerrar   Session.Abandon, entonces como debo hacerlo
    jueves, 22 de junio de 2017 21:50
  • Si claro yo uso para cerrar   Session.Abandon,

    Claro, pues por eso se te borran todas las sesiones.

    Tendrás que dejar de usar el Session.Abandon (que no se inventó para cerrar una sesión de login, sino que sirve para borrar TODOS los datos en una sesión de datos).

    Cuando hagas "logout" tendrás que borrar uno por uno cada dato que ya no sea válido, por ejemplo Session["virtualumno"]=null.

    viernes, 23 de junio de 2017 6:05
  • Bueno gracias.

    Ya lo estaba haciendo así, pensé que no era de forma correcta, agradezco tu colaboración. Una pregunta ya que me estas ayudando tengo otra pregunta para ti.

    Tengo una cuadricula con información de estudiantes de la siguiente manera.


    Codigo Nombre Previo 1 Previo 2 Quices Examen Trabajo 1 Trabajo 2 Trabajo 3 Trabajo4 Guardar Final

    En guardar hay un botón que debe almacenar toda la información (menos código ni nombre) en la tabla calificaciones.

    Como se hace eso en c# WEB 

    Me podrías ayudar.

    Te lo agradezco.

    viernes, 23 de junio de 2017 15:09
  • A ver si lo he entendido: quieres una cuadricula que tenga textboxes en todas las posiciones y un boton global para grabar todas las filas de golpe (por contraposicion al grid tradicional de asp.net, que tiene un boton en cada fila que pasa a "modo edicion" esa unica fila y por tanto solo tiene textboxes en esa unica fila).

    Si es asi, no conozco un componente que te lo haga de golpe con poco esfuerzo. Pero se puede simular generando mediante un par de bucles anidados un HtmlTable que tenga un <input> o un "new TextBox" en cada celda. Hay que tener cuidado de cambiarles el name o el id para que cada uno de ellos tenga un identificados distinto, que incluya la fila y la columna. Y despues, en el PostBack, recorres la coleccion de entradas del Request.Form para obtener todos esos valores, parseas el Key para separar la fila y columna que metiste en el id, sacas el dato tecleado del Value, y listo, ya tienes la informacion lista para grabar.

    Precaucion: si esperas tener mas de unos 1000 textboxes (por ejemplo, 50 filas por 20 columnas), hay que modificar la configuracion de IIS desde el web.config para que no de un error por exceder el numero maximo de inputs permitidos.

    viernes, 23 de junio de 2017 15:44
  • No. creo que no me hice entender.

    haber mi inquietud es la siguiente.

    Yo quiero una cuadricula que me permita editar las notas y al final en el botón guardar escribir el codigo que me permita guardar las notas.

    Osea el código 2454 le ingreso las notas 4.5 - 2.8  -4 - 3.7 - 1.5  - 3.5 - 4 - 5 yo quiero registrar estas notas desde el botón guardar que esta en la fila.

    Espero logre hacerme entender. 

    viernes, 23 de junio de 2017 17:53
  • Ah, eso es mucho más fácil. Lo hace el Grid normalito de ASP.NET. Simplemente configúrale las propiedades para activarle el botón de Editar y el de Grabar, y funciona todo automáticamente: Cuando pulsas Editar se te habilitan los textboxes en la línea, y cuando pulsas grabar se te dispara un evento en el servidor y te llegan todos los valores.

    Hay muchos ejemplos por la red, por ejemplo aquí tienes uno:

    http://www.c-sharpcorner.com/UploadFile/9f0ae2/gridview-edit-delete-and-update-in-Asp-Net/

    viernes, 23 de junio de 2017 19:32