2012-02-06 86 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