asp.net - 我可以从与发出请求的 session 不同的 session 中放弃 InProc ASP.NET session 吗?

标签 asp.net session-state single-sign-on

我们有一个使用集中式身份验证服务器 (CAS) 进行单点登录的应用程序。我们希望进行单点注销,这样,如果用户注销一个应用程序(例如前端门户),则用户会使用相同的单点登录票自动从所有应用程序注销。

期望每个应用程序在登录该应用程序时都会向 CAS 注册一个注销 Hook (URL)。当 CAS 收到来自某个应用程序的注销请求时,它会为共享 SSO 票证的所有应用程序调用注销 Hook 。

我的问题是:有没有办法从不同的 session 中放弃 InProc session ?我认为,由于 HTTP 请求将来自 CAS 服务器,因此它将获得自己的 session ,但我想要终止的是用户的 session 。我很清楚如何使用单独的 session 状态服务器来做到这一点,但我想知道是否可以使用 InProc session 状态。

最佳答案

哈哈,好吧...看来你可以。我想知道是否有任何方法可以做到这一点,事实证明,有。

当您使用 InProc 时,InProcSessionStateStore(内部类)将 session 状态保留在内部(非公共(public))缓存中。您可以通过反射访问此缓存并手动删除 session 状态。

using System;
using System.Reflection;
using System.Web;

object obj = typeof(HttpRuntime).GetProperty("CacheInternal", 
    BindingFlags.NonPublic | BindingFlags.Static)
        .GetValue(null, null);

if (obj != null)
{
    MethodInfo remove = obj.GetType()
        .GetMethod("Remove", BindingFlags.NonPublic | BindingFlags.Instance, 
            Type.DefaultBinder, new Type[] { typeof(string) }, null);

    object proc = remove.Invoke(obj, new object[] { "j" + state.SessionID });
}

最终结果是,下一个请求将采用相同的 SessionID,但 HttpSessionState 将为空。您仍然会收到 Session_Start 和 Session_End 事件。

关于asp.net - 我可以从与发出请求的 session 不同的 session 中放弃 InProc ASP.NET session 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/257843/

相关文章:

c# - 如何从 c# 中的 dob 计算年龄(以年为单位)

asp.net - 如何为我的本地机器设置不同的 web.config 设置?

rest - 如何在 REST 中管理状态

c# - 在 asp.net mvc 4 应用程序中的身份验证中使用 session 变量

asp.net - 生成与 ASP.NET Identity 2.0 联合身份验证配合使用的 SAML SP 元数据文件

asp.net - session 在 Firefox 中的通用处理程序 .ashx 中不起作用

c# - 创建无cookie的 session 机制

azure - 如何使用 camunda 实现 Azure AD SSO

winforms - WinForm 使用带有 SSO 的 webview2

jquery - 如何在网页完全加载之前在网页上显示进度条?