2012-02-06 50 views
0

我被要求不要在我的代碼中的任何地方使用Session。目前,我正在向Web服務界面驗證用戶身份,並將訪問令牌(對象)存儲在會話中,並將其用於後續請求。什麼是將它存儲在服務器端的好地方?出於安全原因,我不想將它發送給客戶端。jquery ajax調用 - 使用會話的替代方法?

下面的代碼 -

var person; 
    $.ajax({ 
     url: 'Default.aspx/LoadPerson', 
     data: JSON.stringify({ id: 1 }), 
     type: 'POST', 
     contentType: 'application/json;', 
     dataType: 'json', 
     success: function (result) { 
      person = result.d; 
     } 
    }); 

我的Web服務方法看起來是這樣的 -

[WebMethod] 
    public static Person LoadPerson(int i) 
    { 
     var person = new Person(); 
     person.Name = "Bob"; 
     var userToken = SetupWebserviceUser(); 
     HttpContext.Current.Session["UserToken"] = userToken(); 
     // Call web service, get data. 
     return person; 
    } 
+0

爲什麼你不能使用會話?這似乎是存儲這些數據的理想場所。另一種選擇是將令牌存儲在數據庫或服務器的內存中,並使用cookie跟蹤用戶,但這正是會話在.net中的工作方式。 – Joel 2012-02-06 20:57:57

+0

該應用將被集成到Web場上的Sharepoint網站。我們的管理員要求我避免使用會話。 – tempid 2012-02-06 21:00:51

回答

0

這將是一個好地方,它存儲在服務器端?

如果您不想將數據存儲在客戶端或菜單中,則沒有太多的選項。
我能想到的唯一選項是DataBase \ static variable \ XML文件。

+0

如果我將它放在一個靜態變量中,它是否會在呼叫中保存數據?編輯:它呢!我只需要訪問令牌對象的三個屬性。我創建了三個靜態變量,設置了值並能夠在隨後的調用中訪問它。現在,我該如何處置這些數據? – tempid 2012-02-06 21:12:05

+0

靜態可能具有潛在的危險性,請記住,Web訪問是多線程的,並驗證您不能以另一個用戶的身份訪問此用戶,而第一個用戶仍處於活動狀態時,不應該允許這樣做。 – JamieSee 2012-02-06 21:31:47

+0

我有一個全局加載函數,它只在頁面加載時被調用一次。我在該函數的開頭明確地將變量設置爲null。現在工作正常。謝謝! – tempid 2012-02-06 21:32:47