2010-08-23 54 views
0

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

我的计划是当用户登录到Facebook(在他们重定向回我们的网站后)时创建一个新的FacebookSession对象。我可以通过使用Facebook SDK在Facebook登录后创建的自动生成的cookie来为此设置状态。所以我希望可以抓取该cookie,当他们回到服务器端并创建我的Facebook会话对象并设置包含该用户的Facebook帐户所需信息的Cookie信息(用户ID,令牌等)的状态。

我不太了解会话状态,也涉及到一个页面的线程。那么,我无法检查每个页面上的现有会话对象,或者当您逐页访问时,它是否会丢失?比方说,当用户回来时,我创建了这个初始的FacebookSession对象,然后立即将它们重定向到另一页Response.Redirect。我失去了那个东西吗?我觉得很对?因为新的页面请求会在IIS中为该用户生成一个新线程?然后,从内存中创建的任何对象的角度来看,清理板块的过程已经被清除。

因此,然后我需要坚持它在数据库中,然后使用诸如GetCurrentSession的方法,以某种方式查找当前用户,并尝试抓取表中的当前会话信息可以称为FacebookSession,在那里我可以存储他们的FacebookUserID,代币等

对不对?

最后,在任何时候,我将如何知道如何检查数据库中的该用户?我需要某种独特的ID?所以我所做的就是添加一个Pk列,它实际上将利用现有会话ID,我们网站上的每个用户都拥有......这是他们访问我们网站时获得的全局全局访问会话。

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

所以这是我现在头痛。如果我在这里走正确的道路,并且如果我对内存,IIS,线程和会话状态正确的方式来攻击这个问题,那么我只是想要一些意见和验证。

+0

我是否正确理解你想用你自己的实现替换默认的'HttpSession'对象,你调用'FacebookSession',或者你想知道如何在你自己的FacebookSession类中使用普通的Session对象? – Abel 2010-08-23 21:53:45

+0

我假设您使用Facebook Connect?如果这样的话,当你执行FB.Init(或者你已经有的任何认证方案)时,Facebook Connect已经授予你对认证cookie的权限。你不需要在会话中再次存储它,这是在状态翻倍。我所做的是设置称为“CurrentFacebookUserId”的服务器端静态属性,它只读取HttpContext.Request.Cookies(每次请求时都会)。在这种情况下,根本不需要服务器端会话。 – RPM1984 2010-08-23 23:38:22

+0

利用我自己的自定义FacebookSession类。 – PositiveGuy 2010-08-24 16:55:14

回答

0

我想你应该从MSDN检查this description

+0

真的,我发现的事情是,每一个对服务器的请求都有客户端的cookies。所以我可以检查JS cookie并使用自定义会话对象来保存数据服务器端并使用它。 – PositiveGuy 2010-08-24 17:07:51