Session 如何在DNN 5.x中注销?

Session 如何在DNN 5.x中注销?,session,dotnetnuke,logoff,Session,Dotnetnuke,Logoff,我们看到了一个问题,在DNN中没有放弃会话。我不确定这是否是4.5.x版的问题,因为我们不久前升级到了5.x版,可能引用了一个旧控件 我们在模块中引用的登录/注销控件是位于路径DNN\u Web\u Root/admin/Skins/login.ascx中的DotNetNuke.UI.Skins.Controls.login 在那里,它看起来像是重定向到logoff.aspx,然后通过LogoffHttpHandler,然后到某个地方完成注销过程,但是我找不到该过程的位置,以查看是否调用了Ses

我们看到了一个问题,在DNN中没有放弃会话。我不确定这是否是4.5.x版的问题,因为我们不久前升级到了5.x版,可能引用了一个旧控件

我们在模块中引用的登录/注销控件是位于路径DNN\u Web\u Root/admin/Skins/login.ascx中的DotNetNuke.UI.Skins.Controls.login

在那里,它看起来像是重定向到logoff.aspx,然后通过LogoffHttpHandler,然后到某个地方完成注销过程,但是我找不到该过程的位置,以查看是否调用了Session.adjust

有人能回答以下问题吗

  • DNN是否存在问题,其中注销时未调用会话放弃
  • 实际处理注销过程的流程是什么

看起来丹·罗在以下代码方面运气不错:

Response.Redirect(Globals.NavigateURL(TTSRoutines.giPunchinPage, "Logoff"), True)

注销通常由Desktopmodules\Admin\Authentication\Logoff.ascx处理。主要操作是清除身份验证cookie,以及一些其他cookie和一些特定于用户的缓存数据


DotNetNuke从不使用会话进行任何操作,并且在注销期间不清除会话。

我想您担心的威胁是共享计算机环境场景,即有人注销但不关闭浏览器,下一个用户坐下来,能够访问一些他们不应该访问的东西,因为会话变量仍然挂在周围20分钟左右

若您必须使用会话,一个解决方法就是简单地检查

System.Web.HttpContext.Current.User.Identity.IsAuthenticated
在任何地方,您都会担心未登录用户利用以前登录用户的会话变量


话虽如此,按照@ScottS的建议,在注销时调用Session.adward()可能是最简单的方法,尽管此选项在托管环境中可能不可用。

这是我在问题中谈到的重定向。我没有找到处理此重定向以注销DNN会话的进程。但是,我想知道DNN是否没有调用Session.about.It(但应该),原因未知。必须深入到DNN源中才能找到答案。是否存在DNN不调用会话的原因。在注销期间放弃?可能存在使用会话的其他模块,或者这是否不正确?如果它是不正确的,为什么这种做法是不正确的?DNN从未接触过会话,无论出于何种原因。如果一个模块想要使用会话,它将全权负责处理会话。我建议不要使用session,因为session通常会积累与特定页面相关的、永远不会被删除的crud,而且在需要在进程外存储并可序列化的web服务器场中,session很快就会变得笨拙。状态几乎总是更好地持久化到数据库中。仔细使用DataCache API可以确保快速访问该状态。@泰晤士河还有其他使用会话状态的模块,我想它们中的大多数都只是让会话超时,当用户不必点击注销时,通常会超时。如果确实要放弃会话,可以自定义Logoff.ascx.cs,或者更安全一些,制作自己的自定义副本并更新身份验证表中的LogoffControlSrc字段以指向它。