使用会话变量有多安全 - asp.net/c#

Man*_*ana 26 c# asp.net session

所以基本上我想知道我使用Session变量的方式有多安全.

我有一个登录表单,用户输入他的用户名/密码,然后进行参数化,然后查询,如果存在用户名/密码,则从db表返回userID.这对每个用户都是独一无二的.

当我有这个值时,这就是我想知道这种方式是否是在会话变量uID中存储userID的安全方式?无论如何这就是我做的,

Session["uID"] = (int)dt.DefaultView[0]["userID"];

FormsAuthentication.RedirectFromLoginPage(username.Text, false);

Response.Redirect("userPage.aspx", false);
Run Code Online (Sandbox Code Playgroud)

然后页面被重定向到另一个页面,我使用会话变量从数据库中获取用户表.

提前感谢您的反馈

Roy*_*tus 42

无论您使用哪种存储方法(内存,会话状态服务器或数据库),会话状态都完全保留在服务器端.

因此,除非您的服务器被黑客攻击,否则Session变量是安全的.如果您的服务器遭到入侵,黑客只能访问自己会话中的数据,除非他找到了分析IIS进程内存的方法.


Rya*_*ugh 15

非常安全,.NET会话变量与可以从客户端查看的cookie变量不同,此实例中的会话变量只能从C#代码访问.

因此,您可以安全地知道,除了运行后台的代码之外,任何人/事物都无法编辑Session变量.

与您的问题没有完全相关,但在您的情况下可能很有用:

您还可以在Session中存储整个对象,这样就可以在会话中存储用户对象,例如

user_Class user = new user_Class();
user.UID = 1;
Session["User"] = user;
Run Code Online (Sandbox Code Playgroud)

然后在每页的加载中重新加载它.

user_Class user = (user_Class)Session["User"];
Run Code Online (Sandbox Code Playgroud)

然后你可以每次从session获取user.UID.