17

如何在不使用ASP.NET Web 应用程序项目的情况下访问UserIdASP.NET Membership ?Membership.GetUser(username)

可以UserId包含在( )Profile旁边的命名空间中吗?UserNameSystem.Web.Profile.ProfileBase

4

10 回答 10

23

试试这个:

MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);
于 2009-01-06T14:27:53.230 回答
13

您是否每次需要 UserId 时都保存数据库调用?如果是这样,当我使用 ASP.NET MembershipProvider 时,我通常要么做一个允许我缓存该调用的自定义提供程序,要么做一个我可以缓存的实用程序方法。

如果您正在考虑将其放入配置文件中,我认为这样做没有太多理由,特别是因为它仍然需要数据库调用,除非您在那里使用自定义配置文件提供程序,否则它具有额外的处理解析出 UserId。

如果您想知道为什么他们没有实现 GetUserId 方法,那仅仅是因为您并不总是保证该用户 ID 将是包含的提供程序中的 GUID。

编辑:

请参阅ScottGu 关于提供程序的文章,该文章提供了下载实际源代码的链接,即 SqlMembershipProvider

但最简单的做法是用户对象或实用程序类中的 GetUserId() 方法,如果存在,则从缓存/会话中获取 UserId,否则访问数据库,通过用户名缓存(或存储在会话中),并返回它。

更多需要考虑的事情(但由于 cookie 大小限制要非常小心):Forms Auth: Membership, Roles and Profile with no Providers and no Session

于 2008-09-29T05:50:53.840 回答
4

我决定自己编写用户用户身份验证(非常简单但有效),我早就应该这样做了。

我最初的问题是关于 UserId 的,但无法从以下位置获得:

System.Web.HttpContext.Current.User.Identity.Name
于 2008-10-02T08:10:21.577 回答
2

尝试以下操作:

Membership.GetUser().ProviderUserKey
于 2013-04-15T23:40:19.763 回答
1
public string GetUserID()
            {
                MembershipUser _User;
                string _UserId = "";
                _User = Membership.GetUser();
                Guid UserId = (Guid)_User.ProviderUserKey;
                return _UserId = UserId.ToString();
            }
于 2014-11-21T21:38:50.463 回答
0

您在这里有两个选择:

1) 使用用户名作为用户数据表的主键,即:

select * from [dbo.User] where Username = 'andrew.myhre'

2) 将 UserID 添加到配置文件中。

每种方法都有优点和缺点。我个人更喜欢第一个,因为这意味着我不一定需要设置开箱即用的配置文件提供程序,而且我更喜欢在我的系统中强制执行唯一的用户名。

于 2008-09-29T09:04:46.947 回答
0

安德鲁:我会小心地做一个像你默认显示的查询,没有与之匹配的索引,所以你冒着全表扫描的风险。此外,如果您将用户数据库用于多个应用程序,则您没有包含应用程序 ID。

最接近的索引是 aspnet_Users_Index,它需要 ApplicationId 和 LoweredUserName。

编辑:

糟糕 - 重读 Andrew 的帖子,他没有在 aspnet_Users 表上选择 *,而是使用用户名作为主键的自定义配置文件/用户表。

于 2008-09-30T17:49:15.603 回答
0

你试过使用System.Web.HttpContext.Current.User.Identity.Name吗?(确保首先验证它User并且Identity是非空的。)

于 2008-09-30T18:17:05.753 回答
0
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}

将从 aspnet_Membership 表中为您提供当前用户的 UserID(唯一标识符) - 前提是当前用户已成功登录。如果您尝试 <%= %> 或在成功验证之前分配该值,您将收到错误“对象引用未设置为对象的实例”。

http://www.tek-tips.com/viewthread.cfm?qid=1169200&page=1

于 2008-12-07T03:29:55.117 回答
0

我遇到了这个问题,解决方案是在 web.config 配置中,尝试使用这些配置 web.config:

 <roleManager
             enabled="true"
             cacheRolesInCookie="true"
             defaultProvider="QuickStartRoleManagerSqlProvider"
             cookieName=".ASPXROLES"
             cookiePath="/"
             cookieTimeout="30"
             cookieRequireSSL="false"
             cookieSlidingExpiration="true"
             createPersistentCookie="false"
             cookieProtection="All">
  <providers>
    <add name="QuickStartRoleManagerSqlProvider"
        type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        connectionStringName="ASPNETDB"
        applicationName="SecurityQuickStart"/>
  </providers>
</roleManager>
于 2011-07-13T09:49:18.713 回答