2011-07-21 20 views
7

Estoy intentando escribir un servicio web que devuelve variables de sesión. La aplicación que llama a este servicio web tiene acceso a la ID de sesión de la sesión actual.Sesión "Suplantación" en una llamada al servicio web

Intenté hacer esto creando una cookie "ASPNet_SessionID" y luego adjuntando establecerla como el contenedor de cookies de una clase proxy para el servicio web, pero eso no funciona. Hice esto como tal,

protected void CallService(string sessionID) 
    { 
     localhost.AuthService auths = new localhost.AuthService(); //Service Proxy class 
     System.Net.CookieContainer cookieJar = new System.Net.CookieContainer(); 


     System.Net.Cookie newCookie = new System.Net.Cookie("ASPNet_SessionID", sessionID); 
     newCookie.Domain = "http://localhost"; 
     cookieJar.Add(newCookie); 
     auths.CookieContainer = cookieJar; 


     string SessionData = auths.GetSessionData(); 

El método web GetSessionData simplemente devuelve los datos de sesión de este modo:

[WebMethod(EnableSession=true)] 
public string GetSessionData(string sessionID) {return ((string)Session["user"]);} 

caso de este método de trabajo, o estoy haciendo algo completamente equivocada?

UPD: Este enlace realidad resuelto mi problema - yo era capaz de acceder a toda la InProc sesiones y fue capaz de seleccionar la correcta por ID:

http://weblogs.asp.net/imranbaloch/archive/2010/04/05/reading-all-users-session.aspx

+0

¿Qué está tratando de lograr? Intentar engañar el manejo de la sesión de asp dará como resultado un código bastante frágil. – Journey

+0

Estoy intentando habilitar una aplicación de terceros para ver qué usuario ha iniciado sesión en mi sitio web. La aplicación está en el mismo dominio que mi sitio, lo que significa que tiene acceso a las mismas cookies y, por lo tanto, a SessionID. Pensé que si almacenaba la información sobre el usuario actual en la sesión, la aplicación de terceros podría enviar una solicitud al servicio web que recuperaría el nombre del usuario de la sesión. –

+0

¿cómo estás manteniendo la sesión? InProc? –

Respuesta

0

interruptor AspCompatibilityMode a cierto

+0

¿Puedes elaborar? ¿Dónde debería hacer esto? –

+0

Esto es solo para servicios WCF hospedados por IIS. – goalie7960

0

¿Su sistema está diseñado para ser un usuario único?

Usted sugiere 'qué usuario está actualmente conectado', pero si ese fuera el caso, no hay mucha necesidad de almacenar nada en la sesión, puede simplemente poner el ID de usuario/nombre/detalles en una tabla en el DB, o potencialmente usar perfiles .NET para actualizar una variable de nivel de aplicación: http://msdn.microsoft.com/en-us/library/2y3fs9xs.aspx

1

"Estoy intentando habilitar una aplicación de terceros para ver qué usuario ha iniciado sesión en mi sitio web".

Para lograr este objetivo, sería mucho mejor utilizar ASP.NET Membership durante la sesión para rastrear usuarios.

Entonces, para ver que ha iniciado sesión en el estado puede simplemente hacer esto:

bool isLoggedIn = Membership.GetUser("Joe.User").IsOnline; 
Cuestiones relacionadas