2010-06-03 6 views

Répondre

4

WCF prend en charge les sessions, mais il nécessite une fixation avec une certaine sécurité, ce lien devrait expliquer:

http://social.msdn.microsoft.com/Forums/is/wcf/thread/7185e8b7-d4e5-4314-a513-ec590f26ffde

Vous pouvez mettre en œuvre un gestionnaire de session vous , une classe statique qui maintient une liste de sessions. Chaque session peut avoir un 'System.Timers.Timer' pour spécifier un délai d'attente pour la session, puis connecter un gestionnaire d'événement à appeler lorsque le délai de session expire. Lorsque cela se produit, le gestionnaire de session peut disposer de la session, ou si la session est appelée en utilisant un Guid (l'ID de session) comme référence, le minuteur peut être réinitialisé en gardant la session en vie.

En ce qui concerne le cookie (qui serait probablement l'ID de session), vous pouvez utiliser des méthodes comme celles-ci pour obtenir et définir le cookie dans la demande:

/// <summary>Gets a cookie value from cookies for given key.</summary> 
    /// <param name="cookieKey">The key for the cookie value we require.</param> 
    /// <returns>The cookie value.</returns> 
    /// <exception cref="KeyNotFoundException">If the key was not found.</exception> 
    private string GetCookieValue(string cookieKey) 
    { 
     string cookieHeader = WebOperationContext.Current.IncomingRequest.Headers[HttpRequestHeader.Cookie]; 
     string[] cookies = cookieHeader.Split(';'); 
     string result = string.Empty; 
     bool cookieFound = false; 

     foreach (string currentCookie in cookies) 
     { 
      string cookie = currentCookie.Trim(); 

      // Split the key/values out for each cookie. 
      string[] cookieKeyValue = cookie.Split('='); 

      // Compare the keys 
      if (cookieKeyValue[0] == cookieKey) 
      { 
       result = cookieKeyValue[1]; 
       cookieFound = true; 
       break; 
      } 
     } 

     if (!cookieFound) 
     {     
      string msg = string.Format("Unable to find cookie value for cookie key '{0}'", cookieKey); 
      throw new KeyNotFoundException(msg); 
     } 

     // Note: The result may still be empty if there wasn't a value set for the cookie. 
     // e.g. 'key=' rather than 'key=123' 
     return result; 
    }   

    /// <summary>Sets the cookie header.</summary> 
    /// <param name="cookie">The cookie value to set.</param> 
    private void SetCookie(string cookie) 
    { 
     // Set the cookie for all paths. 
     cookie = cookie + "; path=/;" ; 
     string currentHeaderValue = WebOperationContext.Current.OutgoingResponse.Headers[HttpResponseHeader.SetCookie]; 

     if (!string.IsNullOrEmpty(currentHeaderValue)) 
     { 
      WebOperationContext.Current.OutgoingResponse.Headers[HttpResponseHeader.SetCookie] 
       = currentHeaderValue + "\r\n" + cookie; 
     } 
     else 
     { 
      WebOperationContext.Current.OutgoingResponse.Headers[HttpResponseHeader.SetCookie] = cookie; 
     } 
    } 

Il suffit de régler le cookie à quelque chose comme " sessionId = {myGuidHere} ".

J'espère que cela aide de toute façon .. désolé, je ne peux pas poster plus d'exemple de code que je l'écris pour un client.

peteski

+0

Est-ce que ça ne répond pas à la question? :( – peteski

1

Si vous voulez juste travailler avec les cookies, le WebHttpBinding déjà has that capability mais il est désactivé par défaut. Je ne suis pas familier avec les autres fonctionnalités que les sessions PHP fournissent, mais puisque WebHttpBinding est construit sur le modèle de requête/réponse HTTP sans session, vous devrez faire rouler vos propres croquis @ peteski22 dans sa réponse.