none
Bloquear que abran varias pestañas en el navegador RRS feed

  • Pregunta

  • Buenas tardes, tengo un problema con aplicación hecha en VS2012, c#, asp, lo que pasa es que los usuarios abren sesión normal, después abren otra pestaña, pero ya no inician sesión, escriben la url y como ya esta iniciada la sesión, pues lo deja pasar, lo que yo quiero hacer, es que al abrir otra pestaña y escriban la url, al cargar la pagina detecte que ya hay otra pestaña abierta. ¿Se puede lograr eso?



    Gracias por la ayuda.

    Hugo Gil

    jueves, 23 de junio de 2016 16:54

Respuestas

  • No creo que se pueda, salvo que rehagas por completo la aplicación y la conviertas en un SPA (single-page application) que gestione todas las navegaciones desde Javascript. El problema está en la naturaleza de tipo desconectado del protocolo http. Cada petición que llega al servidor es completamente independiente de las anteriores, y no depende de cuál sea la ventana o pestaña del navegador desde el que se envió, con lo que el servidor no dispone de información sobre la pestaña. Lo mejor y lo que más apreciarán tus usuarios es que no intentes limitarles y les dejes operar como a ellos les guste. En lugar de intentar impedirles que abran pestañas, arregla la aplicación para que funcione bien en varias pestañas sin que tenga ningún problema. Tus clientes lo agradecerán y estarán más contentos con tu producto.
    jueves, 23 de junio de 2016 18:55
  • Mientras estén dentro del mismo form, podrías usar el ViewState en lugar del Session. Cada pestaña tendrá su propio ViewState y no se mezclará con las otras (a diferencia del Session que es común).

    Pero si hay que conservar los datos mientras se salta de un form a otro, entonces no puede ser el ViewState, tiene que ser el session a la fuerza. Aquí es donde entra lo que yo decía de revisar cuidadosamente la aplicación para que funcione. Por ejemplo si en el Session hay un carrito de la compra, lo que se hace es que se usa (por ejemplo) un List<Producto> para el carrito, y en cada pestaña el botón de "comprar" añade el producto al List (en lugar de sobreescribir el List). Esto permite que el usuario abra varias pestañas con varios productos para compararlos, y en aquellas que le gusten pueda comprar el producto y todos se vayan añadiendo al carrito sin sobreescribirse. Es solo un ejemplo, lo que quiero ilustrar con ello es que si se estudia bien qué es lo que se pone en el Session y bajo qué circunstancias, se puede conseguir una aplicación amistosa para el usuario, permitiéndole operar en la forma que le resulte cómoda.

    jueves, 23 de junio de 2016 19:32

Todas las respuestas

  • No creo que se pueda, salvo que rehagas por completo la aplicación y la conviertas en un SPA (single-page application) que gestione todas las navegaciones desde Javascript. El problema está en la naturaleza de tipo desconectado del protocolo http. Cada petición que llega al servidor es completamente independiente de las anteriores, y no depende de cuál sea la ventana o pestaña del navegador desde el que se envió, con lo que el servidor no dispone de información sobre la pestaña. Lo mejor y lo que más apreciarán tus usuarios es que no intentes limitarles y les dejes operar como a ellos les guste. En lugar de intentar impedirles que abran pestañas, arregla la aplicación para que funcione bien en varias pestañas sin que tenga ningún problema. Tus clientes lo agradecerán y estarán más contentos con tu producto.
    jueves, 23 de junio de 2016 18:55
  • Gracias Alberto, la aplicación , es como tipo punto de venta, y usa variables de sesión y el problema mayor que tengo es eso, que tienen una pantalla abierta con ciertos datos, y al abrir la misma pantalla en otra ventana, ya sobreescribe la variable de sesión, y eso bate la información.

     

    Hugo Gil

    jueves, 23 de junio de 2016 19:01
  • Mientras estén dentro del mismo form, podrías usar el ViewState en lugar del Session. Cada pestaña tendrá su propio ViewState y no se mezclará con las otras (a diferencia del Session que es común).

    Pero si hay que conservar los datos mientras se salta de un form a otro, entonces no puede ser el ViewState, tiene que ser el session a la fuerza. Aquí es donde entra lo que yo decía de revisar cuidadosamente la aplicación para que funcione. Por ejemplo si en el Session hay un carrito de la compra, lo que se hace es que se usa (por ejemplo) un List<Producto> para el carrito, y en cada pestaña el botón de "comprar" añade el producto al List (en lugar de sobreescribir el List). Esto permite que el usuario abra varias pestañas con varios productos para compararlos, y en aquellas que le gusten pueda comprar el producto y todos se vayan añadiendo al carrito sin sobreescribirse. Es solo un ejemplo, lo que quiero ilustrar con ello es que si se estudia bien qué es lo que se pone en el Session y bajo qué circunstancias, se puede conseguir una aplicación amistosa para el usuario, permitiéndole operar en la forma que le resulte cómoda.

    jueves, 23 de junio de 2016 19:32
  • Gracias por la atención, pero es una aplicación grande y necesitaría de tiempo y muchas pruebas para realizar un cambio como el que mencionas, y los cambios los requieren con cierta urgencia. Pero gracias por el tiempo de contestar. Voy a seguir buscando y si encuentro algo, lo publico.

    Saludos.


    Hugo Gil

    jueves, 23 de junio de 2016 20:47