【问题标题】:"Impersonating" session in a web service callWeb 服务调用中的“模拟”会话
【发布时间】:2011-10-10 14:09:55
【问题描述】:

我正在尝试编写一个返回会话变量的 Web 服务。调用此 Web 服务的应用程序可以访问当前会话的会话 ID。

我尝试通过创建一个“ASPNet_SessionID”cookie,然后将其设置为代理类的 cookie 容器附加到 Web 服务,但这不起作用。我是这样做的,

 protected void CallService(string sessionID)
    {
        localhost.AuthService auths = new localhost.AuthService(); //Service Proxy class
        System.Net.CookieContainer cookieJar = new System.Net.CookieContainer();


        System.Net.Cookie newCookie = new System.Net.Cookie("ASPNet_SessionID", sessionID);
        newCookie.Domain = "http://localhost";
        cookieJar.Add(newCookie);
        auths.CookieContainer = cookieJar;


        string SessionData = auths.GetSessionData();

GetSessionData web 方法简单地返回会话数据,如下所示:

[WebMethod(EnableSession=true)]
public string GetSessionData(string sessionID) {return ((string)Session["user"]);}

这种方法应该有效,还是我做错了什么?

UPD:这个链接实际上解决了我的问题 - 我能够访问所有会话 InProc 并且能够通过 ID 选择正确的会话:

http://weblogs.asp.net/imranbaloch/archive/2010/04/05/reading-all-users-session.aspx

【问题讨论】:

  • 你想达到什么目的?试图欺骗 asp 的会话处理会导致一些非常脆弱的代码。
  • 我正在尝试启用第三方应用程序以查看哪些用户登录到我的网站。该应用程序与我的站点位于同一域中,这意味着它可以访问相同的 cookie,因此也可以访问 SessionID。我认为如果我将有关当前用户的信息存储在 Session 中,第三方应用程序将能够向 Web 服务发送请求,该服务将从会话中检索用户的名称。
  • 你如何保持会话?进程内?
  • @Adrian - 是的,我正在保留会话 InProc。我之前的解决方案是使用 SQL 数据库并通过 SessionID 进行查找,但这不适用于网站的某个部分(Sitecore CMS)。现在我正在尝试另一种方法。

标签: c# asp.net session session-cookies


【解决方案1】:

“我正在尝试启用第三方应用程序以查看哪些用户登录了我的网站。”

要实现这一目标,您最好使用ASP.NET Membership 而不是 Session 来跟踪用户。

然后,要查看登录状态,您只需执行以下操作:

bool isLoggedIn = Membership.GetUser("Joe.User").IsOnline;

【讨论】:

    【解决方案2】:

    将 AspCompatibilityMode 切换为 true

    【讨论】:

    • 你能详细说明一下吗?我应该在哪里做这个?
    • 这仅适用于 IIS 托管的 WCF 服务。
    【解决方案3】:

    您的系统是为单用户设计的吗?

    您建议“当前登录的用户”,但如果是这种情况,则不需要在会话中存储任何内容,您可以将用户 ID/名称/详细信息粘贴到数据库中的表中,或者可能使用 .NET 配置文件更新应用程序级变量 - http://msdn.microsoft.com/en-us/library/2y3fs9xs.aspx

    【讨论】:

      猜你喜欢
      • 2019-11-18
      • 2014-09-23
      • 2010-10-30
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      相关资源
      最近更新 更多