Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 会话和内存中的对象_C#_Asp.net - Fatal编程技术网

C# 会话和内存中的对象

C# 会话和内存中的对象,c#,asp.net,C#,Asp.net,我在这里很困惑。好的,我正在尝试创建一个会话对象,我们可以用它来存储一些信息 我的计划是在用户重定向回我们的站点后,每当用户登录Facebook时,创建一个新的FacebookSession对象。我可以使用facebook SDK在他们登录facebook后创建的自动生成cookie来设置状态。因此,当他们回到服务器端时,我希望能够抓取cookie,创建我的FacebookSession对象,并设置cookie信息userID、token等的状态,其中包含该用户facebook帐户所需的信息 我

我在这里很困惑。好的,我正在尝试创建一个会话对象,我们可以用它来存储一些信息

我的计划是在用户重定向回我们的站点后,每当用户登录Facebook时,创建一个新的FacebookSession对象。我可以使用facebook SDK在他们登录facebook后创建的自动生成cookie来设置状态。因此,当他们回到服务器端时,我希望能够抓取cookie,创建我的FacebookSession对象,并设置cookie信息userID、token等的状态,其中包含该用户facebook帐户所需的信息

我不太了解会话状态,也不太了解与页面相关的线程。所以,我不能在每个页面上检查现有的会话对象吗?或者当您从一页转到另一页时,它是否丢失了?假设我在用户返回时创建此初始FacebookSession对象,然后立即将其重定向到另一个页面Response.redirect。我丢了那个东西吗?我想是吧?因为新页面请求会在IIS中为该用户生成新线程,对吗?然后你就可以从一块干净的石板开始,因为你在内存中创建的任何对象都被删除了

因此,我需要将其保存在数据库中,然后使用GetCurrentSession之类的方法,以某种方式查找当前用户,并尝试在一个表中获取当前会话信息,比如FacebookSession,我可以在其中存储他们的facebookUserID、令牌等

对吧?

最后,在任何时候,我如何知道如何在数据库中检查该用户?我需要某种唯一的身份证?因此,我所做的是添加一个Pk列,实际上将利用我们网站上每个用户现有的sessionID。这是他们访问我们网站时获得的整体全局访问会话

因此,使用它,我可以通过他们的全局会话ID在我的表中查找他们的facebook会话来唯一标识他们的facebook会话(如果存在)。但我现在遇到的最终问题是,为了从我的FacebookSession.cs对象调用GetCurrentSession,我需要以某种方式传递这个全局ID。我可以通过构造函数来实现这一点,我不会让它成为一个单例。但现在,该对象和其他几个对象依赖于查找用户Facebook会话所需的全局ID。如果我们想重用我在其他项目中创建的库/包装器,而这些项目不想使用全局会话作为PK,那么我就有点完蛋了


这就是我现在的头痛。如果我在这里走的是正确的道路,如果我在内存、IIS、线程方面是正确的,我只需要一些意见和验证,以及会话状态来攻击此对象。

我想您应该从MSDN中进行检查。

我是否正确理解您希望用自己的实现(称为FacebookSession)替换默认的HttpSession对象,或者您想知道如何将普通会话对象与您自己的FacebookSession类一起使用吗?我假设您正在使用FacebookConnect?如果是这样,Facebook Connect已经在您执行FB.Init或您现有的任何身份验证方案时授予您对身份验证cookie的权限。您不需要在会话中再次存储此信息,这将在状态中加倍。我要做的是设置名为CurrentFacebookUserId的服务器端静态属性,它只读取每个请求上的HttpContext.Request.Cookies。在这种情况下,您根本不需要服务器端会话。使用我自己的自定义FacebookSession类。我不使用facebook connect。我正在使用新的Graph API,包括对Graph API的JS SDK-ajax调用,以及对新API的一些服务器端调用。出于性能原因,我们也没有使用ASP.NET会话状态,因为我们在一个服务器场上运行我们的站点。实际上,我发现对服务器的每个请求都有客户端的cookie。所以我可以检查JS cookie并使用自定义会话对象来保存数据服务器端并使用它。