ASP.NET - Sesiones

 
Vista:

Sesiones

Publicado por Juan garcia (4 intervenciones) el 18/05/2007 01:31:23
Tengo una aplicacion web en la que guardo en una variable de sesion el nombre del usuario que ha hecho login correctamente para permitir el acceso a la zona que no es publica.
Para impedir el acceso a dicha zona lo que hago es comparar si existe una variable de sesion y si es asi, permito el acceso, lo cual no es muy seguro que digamos, ¿Se puede hacer de una forma mas segura?
Y otra cosa, ¿como puedo hacer que la variable de sesion que guardo se borre cuando el usuario cierra el navegador? Había pensado en una cookie que expirara al poco tiempo de haberla guardado y volverla a guardar mientras el usuario este con el navegador enchufado o con mi pagina cargada en el, pero no se como hacerlo.
¿Alguno me puede ayudar?
Gracias anticipadas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sesiones

Publicado por Javier Santamaria (312 intervenciones) el 18/05/2007 10:48:11
Hola Juan, yo uso authentication para dar acceso a las paginas publicas o privadas, luego tengo una clase que me controla si la sesion expira y me borra los datos de la sesion. Tambien borro los datos de la sesion cuando el usuario hace logout. Te pongo el codigo para que lo veas mas claro:

Authentication en el web.config:
***************************************************************************
<authentication mode ="Forms" >
<forms loginUrl="~/Public/Login.aspx"
defaultUrl="~/Private/Index.aspx" />
</authentication>

<authorization> (permito el acceso a todos)
<allow users ="*"/>
</authorization>

<sessionState
mode="InProc"
cookieless="false"
timeout="15" />

mas codigo ....

</system.web>

<location path="~/Private"> (restrinjo el acceso a la carpeta private)
<system.web>
<authorization>
<deny users ="?" />
</authorization>
</system.web>
</location>
***************************************************************************

Clase de control de expiracion de sesion (esta clase la heredan las paginas privadas para controlar el estado de la sesion):
***************************************************************************
Public Class Sesion
Inherits System.Web.UI.Page (hereda la definicion de pagina para que las paginas privadas no la pierdan)

Public Overridable Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Response.AddHeader("Refresh",((Session.Timeout * 60) + 5).ToString)
If (Session("Log In") Is Nothing) Then (sesion acabada)
FormsAuthentication.RedirectToLoginPage()
End If
End Sub

End Class
***************************************************************************

Evento load de las paginas privadas:
***************************************************************************
Partial Class Private_NombreClase
Inherits Sesion (hereda sesion para el control de la ssesion)

Public Overrides Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
MyBase.Page_Load(sender, e) (aqui comprueba la sesion)
End Sub
***************************************************************************

Evento log out:
***************************************************************************
Protected Sub ButtonSalir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonSalir.Click
FormsAuthentication.SignOut()
session.clear()
Response.Redirect("~/Public/Index.aspx")
End Sub
***************************************************************************

Espero que te sirva, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sesiones

Publicado por Juan garcia (1 intervención) el 22/05/2007 00:36:53
Hola Javier,
gracias por tu respuesta. Ya he conseguido que impida el acceso al contenido privado si no se ha hecho login. Pero me ha surgido otro problema. En mi aplicación web utilizo una página principal (master page) dentro de la cual añado el resto de páginas. Cuando accedo al contenido privado, todas las rutas (incluidas las de las imagenes) de mi página principal se relativizan a la ruta donde está la página privada. ¿Para solucionarlo tendría que duplicar todo el contenido de la zona pública para tener la misma ruta en la zona privada o hay alguna solución más fácil?
Espero me haya explicado y gracias de nuevo por tu respuesta anterior.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sesiones

Publicado por Javier Santamaria (312 intervenciones) el 22/05/2007 11:03:55
Hola Juan,

No se si te he entendido bien, pero por ejemplo digamos que tu tienes tu carpeta de aplicacion donde esta la master page y luego tienes una carpeta con tus paginas publicas, otra con tus paginas privadas y otra con las imagenes, es decir:

1. CARPETA APLICACION
1.1 PUBLICO
1.1.1 Index.aspx
1.1.2 Login.aspx
1.2 PRIVADO
1.2.1 Index.aspx
1.3 IMAGENES
1.3.1 Imagen.jpg
1.4 Master Page
1.5 web.config

Pues para acceder a estas partes harias:

~/(Accedes al nivel 1)/(Carpeta)/ (Accedes a nivel 2)

Es decir: ~/web.config (Nivel 1)
~/PUBLICO/Index.aspx (Nivel 2)
~/IMAGENES/Imagen.jpg

Era esto lo que preguntabas?

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sesiones

Publicado por Juan garcia (4 intervenciones) el 22/05/2007 17:57:43
Sí, algo así, solo cambia que mis páginas públicas están dentro de la carpeta aplicación directamente.
El caso es que en mi Master Page hay enlaces que dirigen hacia páginas de contenido público y privado, y al acceder a una privada se cambian todos los enlaces y les añade /PRIVADO/ entre el nombre del servidor y el nombre de la página.
Para acceder a index.aspx público uso <a href=index.aspx...>index.aspx</a>, vamos, los enlaces html de toda la vida, para el index.aspx privado lo mismo pero cambiando href=/PRIVADO/index.aspx.
Y lo mismo con las imagenes. Tras acceder a index.aspx privado las busca en la carpeta IMAGENES de PRIVADO, y no las encuentra como es obvio.
No se, es raro. Es como si cuando accediera a la carpeta PRIVADO cambiara la ruta de la CARPETA APLICACIÓN.
Seguiré buscando alguna solución y de momento duplicaré contenido, que gracias a dios, no es mucho.
Gracias y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sesiones

Publicado por Javier Santamaria (312 intervenciones) el 23/05/2007 13:19:46
Hola Juan,

Por lo que me cuentas tienes esto

1. APLICACION
Paginas Publicas
1.1 IMAGENES
Imagen.jpg
1.2 PRIVADO
Index.aspx

Pues si estas en tu Index.aspx de la carpeta privado debes hacer esto para coger una imagen:

~/../Imagenes/Imagen.jpg

A ver si ahora funciona.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sesiones

Publicado por Juan garcia (4 intervenciones) el 23/05/2007 16:14:35
Hola Javier,

casi,
quiero cargar una imagen (que está en la carpeta Imagenes) en la Master Page (que está junto con las páginas públicas).
Al inicio, cuando accedo a la página index.aspx pública contenida en la Master Page, la veo bien, ya que la busca en la carpeta Imagenes de la aplicacion (~/.../Imagenes/Imagen.jpg).
Pero cuando accedo a index.aspx de la carpeta privado, esa imagen la busca en la carpeta Imagenes, pero ahora no de la aplicación, sino de la carpeta Privado (~/.../Privado/Imagenes/Imagen.jpg).
Yo no modifico enlace alguno, ya que la Master Page es la misma, lo único que cambia es la página que cargo en el contenedor de esa Master Page.

Te pongo el código que se ve con el navegador por si lo ves mejor:
Master Page sin hacer login:
<img src=Imagenes/Imagen.jpg>
<a href=index.aspx>index publico</a>
<a href=Privado/index.aspx>index privado</a>

Tras hacer login accedo a index.aspx privado y el código cambia:
<img src=Privado/Imagenes/Imagen.jpg>
<a href=Privado/index.aspx>index publico</a>
<a href=Privado/Privado/index.aspx>index privado</a>

¿Curioso verdad?

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sesiones

Publicado por Juan garcia (4 intervenciones) el 23/05/2007 18:55:06
Hola Javier,
gracias por haberte tomado la molestia de contestarme.
Ya he conseguido arreglar lo de los enlaces.
Solo tenía que poner la barra (/) antes del nombre de cada página o imagen.
Ya lo habías puesto en algún mensaje pero no me había fijado en ese detalle, xD.
Bueno pues eso que gracias por las molestias,
un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sesiones

Publicado por Javier Santamaria (312 intervenciones) el 24/05/2007 10:24:15
Hola juan, de nada, me alegro de que se arreglara. Nos vemos en otra, un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar