2010-06-03 107 views

回答

4

WCF支持會話,但是它需要一些安全綁定,這個環節應該解釋:

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

你可以自己實現一個會話管理器,一些維護會話列表的靜態類。每個會話都可以有一個'System.Timers.Timer'來指定會話超時,然後掛接一個事件處理程序,以便在會話計時器到期時被調用。

當發生這種情況時,會話管理器可以處理該會話,或者如果使用Guid(會話ID)作爲參考調用會話,則可以重置該定時器以保持會話存活。

在cookie中(這最有可能是會話ID),你可以用這樣的方法來獲取和設置請求的cookie方面:

/// <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; 
     } 
    } 

只需設置cookie來像「的sessionId = {myGuidHere}」。

我希望無論如何幫助..對不起,我寫了更多的示例代碼,因爲我正在爲客戶寫它。

peteski

+0

這不是回答這個問題嗎? :( – peteski 2011-06-23 16:16:18

1

如果你只是想與cookies工作,已經的WebHttpBinding但has that capability它默認是關閉的。我不熟悉PHP會話提供的其他功能,但由於WebHttpBinding構建在無會話的HTTP請求/響應模式之上,因此您必須在答案中將自己作爲@ peteski22草圖進行展示。