gpt4 book ai didi

entity-framework-4 - session 中的 ASP.Net MVC 存储用户实体

转载 作者:行者123 更新时间:2023-12-04 17:40:32 25 4
gpt4 key购买 nike

我正在开发一个带有 Entity Framework 4 的 ASP.Net MVC 3 Web 应用程序。当用户登录我的应用程序时,我想将他们的用户实体(名字、姓氏等)存储在一个 session 中,然后可以在整个应用程序中进行访问。

我知道这可能不是一个好主意,因为当 ObjectContext 关闭/处置时,用户实体将被分离并且用户详细信息可能会丢失。

我认为另一种方法可能是,当用户登录时,将用户 ID(主键)分配给 session 变量,即:

HttpContext.Current.Session["currentUserID"] = user.userID;

然后在 UserService 类中创建一个类,如下所示:
public static User CurrentUser
{

get
{
return Data.DBEntities.Users.Where(u => u.userID == HttpContext.Current.Session["currentUserID"]).FirstOrDefault();
}

}

它应该根据 currentUserID session 变量返回一个用户实体。但是,这对我不起作用,我遇到了一些错误
Cannot convert lambda expression to type 'string' because it is not a delegate type
Delegate 'System.Func<Asset.Model.User,int,bool>' does not take 1 arguments

我采取的这种方法是否正确,还是有更好的方法?

任何反馈将不胜感激。

最佳答案

首先,不要在Session中存储安全敏感信息.谷歌“ASP.NET session 劫持”了解原因。

也就是说,可以使此代码工作。你只是有一个 Actor 错误。此外,您没有考虑到 Session 的事实。可以并且确实在登录期间过期。你可以这样做:

public static User CurrentUser
{
get
{
object userID = HttpContext.Current.Session["currentUserID"];
if (userID == null)
{
throw new InvalidOperationException("Oops!");
}
return Data.DBEntities.Users.Where(u => u.userID == (int)userId ).FirstOrDefault();
}
}

...至少可以编译,但不安全,有时会抛出。

最好将用户 ID 存储在 custom principal 上,这是安全的,不会过期。

关于entity-framework-4 - session 中的 ASP.Net MVC 存储用户实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com