【问题标题】:How to logout from all the opened web applications through the logout button in the portal?如何通过门户中的注销按钮从所有打开的 Web 应用程序中注销?
【发布时间】:2014-02-08 14:33:42
【问题描述】:

我使用post method 通过我的门户打开不同的网站,如下所示:

在我的门户主页中:

<form method="post" target="_blank" action="">
<input id="Hdn_r" name="Hdn" type="hidden" value="55622"> 
.....
</form>

然后在any site opened through the portal 的主页中进行以下检查:

var hr = HttpContext.Current.Request.UrlReferrer;
        if (hr != null && !string.IsNullOrEmpty(hr.AbsolutePath))
        {
            if (Request.UrlReferrer.AbsolutePath.Contains("Portal"))
            {

                if (Request.Form["Hdn_r"] != null && !string.IsNullOrEmpty(Request.Form["Hdn_r"].ToString())
                   && Request.Form["Hdn_a"] != null && !string.IsNullOrEmpty(Request.Form["Hdn_a"].ToString()) &&
                   Request.Form["Hdn_b"] != null && !string.IsNullOrEmpty(Request.Form["Hdn_b"].ToString()) &&
                   Request.Form["Hdn_c"] != null && !string.IsNullOrEmpty(Request.Form["Hdn_c"].ToString())
                   )
                {

                  Session["emp_num"]= int.Parse(Request.Form["Hdn_r"].ToString());
                //...........

我的问题是:

如何在我的门户中一键退出所有打开的网站?

假设我通过我的门户打开了三个网站,我想在我注销时(在门户中)从所有打开的应用程序中注销我?

注意:门户中不同的网站发布在不同的服务器上。

【问题讨论】:

标签: asp.net security post portal


【解决方案1】:

在您的所有网站中创建一个注销页面。然后,当您要注销时,请使用 ajax 调用这些注销页面。或向该注销页面发出 httprequests。您不能直接注销,因为它们不在同一个域中,并且一个站点无法更改另一个站点的会话。

【讨论】:

    【解决方案2】:

    为什么不尝试针对所有网站发出正确的 POST 请求,以便以编程方式注销?

    http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest(v=vs.110).aspx

    【讨论】:

    • 是这样的,我想解决当前状态下的问题
    • 好吧,既然你知道你正在打开的网站(我猜)你知道如何登录,所以你应该能够以同样的方式注销(我的意思是模拟由“注销”完成的请求" 按钮) ?
    【解决方案3】:

    您无法在另一个网站中获得一个网站的会话。不同的网站有不同的会话状态。此外,如果您想解决上述问题,请在您的应用程序中使用 Cookies。 Cookie 详细信息存储在浏览器中,所有网站均可在全球范围内访问。当您登录您的门户网站时,使用您的登录凭据创建一个 cookie,如果您单击网站门户上提供的任何网站链接,请使用您的 cookie 信息登录。最后,如果您单击任何注销按钮,请清除您的 cookie 信息.试试这个。

    【讨论】:

      【解决方案4】:

      第一个问题是您如何管理您的连接。 ?

      一件事可能是在任何页面的前端控制器中检查的状态标志,如果该标志为假,您将重定向到登录页面并终止所有会话数据。

      【讨论】:

        【解决方案5】:

        您真的了解“登录”的含义吗?

        据我所知,您的用户刚刚通过隐藏的 Session 变量登录 - 因此,一旦他关闭任何这些页面的浏览器窗口,他就不再登录。因为如果他打开再次页面没有隐藏会话变量他没有登录。

        我会像大多数 SSO 解决方案(例如 Shibboleth)一样继续进行 - 没有“注销”之类的东西,您有一个活动会话,在该会话中,您被 SSO 服务识别为某个用户,验证您的凭据 - 当您关闭此会话并打开一个新会话,您必须再次进行验证。如果您未再次通过验证,您将在新会话中以匿名用户的身份访问该页面,就用户体验而言,这与“注销”相同

        注销通常只是删除 cookie(如果 cookie 正在使用,但并非总是如此)并使服务器上的当前会话令牌无效。但对于许多服务(尤其是单点登录解决方案)而言,情况并非如此,这些服务只会让用户相信他已通过将他重置到新会话来“注销”,而在该会话中他尚未得到 SSO-Server 的验证。

        【讨论】:

          【解决方案6】:

          无需详细介绍您的实现方法,您可以按名称打开一个新窗口并将其名称作为您的表单目标(sample),您需要进行以下更改:

          1. 更新您的登录按钮以使用 javascript 发布:

            // holds the list of opened websites, used later for logout.
            var openedWebsites = [];
            
            function login(siteName) {
              openedWebsites.push(siteName);
              var windowName = siteName + "_window";
              //assuming you name your forms as "{sitename}_loginForm"
              var loginForm = siteName + "_loginForm";
            
              var form = document.getElementById(loginForm);
              form.target = windowName;
              window.open("",windowName);
              form.submit();
            }
            
          2. 然后让您的注销按钮向每个窗口发布注销请求:

            function logout(){
              for(var x=0;x<openedWebsites.length;x++){
                var siteName = openedWebsites[x]; 
                var windowName = siteName + "_window";
                //assuming you name your forms as "{sitename}_logoutForm"
                var logoutForm = siteName + "_logoutForm";
            
                var form = document.getElementById(logoutForm);
                form.target = windowName;
                form.submit();
                }
            }
            

          【讨论】:

            猜你喜欢
            • 2012-01-20
            • 2017-06-25
            • 1970-01-01
            • 1970-01-01
            • 2011-04-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-10
            相关资源
            最近更新 更多