2011-07-21 85 views
7

我正在嘗試編寫一個返回會話變量的Web服務。調用此Web服務的應用程序可以訪問當前會話的會話ID。在Web服務調用中「模擬」會話

我試圖通過創建一個「ASPNet_SessionID」cookie,然後將它設置爲代理類的cookie容器到Web服務,但這不起作用。我這樣做,像這樣,

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(); 

的GetSessionData Web方法簡單地返回,像這樣的會議數據:

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

如果這種方式工作,還是我做一些完全錯誤的?

UPD:該鏈接實際上解決我的問題 - 我是能夠訪問所有的會話InProc方式,並能選擇正確的ID:

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

+0

你到底想達到什麼目的?試圖欺騙asp的會話處理將導致一些非常脆弱的代碼。 – Journey

+0

我試圖啓用第三方應用程序來查看用戶登錄到我的網站。該應用程序與我的網站位於同一個域中,這意味着它可以訪問相同的Cookie,因此也可以訪問SessionID。我認爲,如果我在會話中存儲有關當前用戶的信息,則第三方應用程序將能夠向Web服務發送請求,以便從會話中檢索用戶的名稱。 –

+0

你如何保持會話? InProc方式? –

回答

0

開關AspCompatibilityMode真

+0

你能詳細點嗎?我應該在哪裏做這件事? –

+0

這僅適用於IIS託管的WCF服務。 – goalie7960

0

您的系統設計爲單用戶嗎?

你認爲「哪個用戶當前登錄的」,但如果是這樣的話沒有太多需要存儲在會話話,你可能只是堅持的用戶名/姓名/細節到一個表在數據庫中,或可能使用.NET配置文件來更新應用程序級別變量 - http://msdn.microsoft.com/en-us/library/2y3fs9xs.aspx

1

「我試圖啓用第三方應用程序來查看用戶登錄到我的網站。」

要實現這個目標,您最好在Session上使用ASP.NET Membership來跟蹤用戶。

然後,看到登錄狀態,你可以簡單地這樣做:

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