2016-12-14 36 views
0

我提出只是一个很简单的密码输入方式:创建正确的密码后,会议已经进入

cmd.Parameters.AddWithValue("@password", TextBox2.Text); 

SqlDataAdapter sda = new SqlDataAdapter(cmd); 
DataTable dt = new DataTable(); 
sda.Fill(dt); 

con.Open(); 
int i = cmd.ExecuteNonQuery(); 
con.Close(); 

if (dt.Rows.Count > 0) 
{ 
    Response.Redirect("/login/system.aspx"); 
} 
else 
{ 
    Label1.Text = "Your password is incorrect!"; 
    Label1.ForeColor = System.Drawing.Color.Red;   
} 

我需要做一个会话,提供行计数大于0

喜欢的东西:

Session["LoggedInOk"] = ""; 

但是,我不应该永远设置TextBox2.Text值(密码)到一个会话应该我?

我该如何创建一个会话,以便如果他们登录到密码访问页面,它们将被重定向,但不会将会话设置为密码。

我可以在“”中创建任何文本吗?

然后在密码访问页面类似?:

if(Session["LoggedInOk"] == null) 
{ 
    Response.Redirect("/login/default.aspx"); 
}     
else 
{ 
    Session["LoggedInOk"] = true; 
} 
+0

使用授权或认证会话是不是有什么会议的目的是为和会被认为是不好的做法。使用现有的身份验证/授权框架,如ASP.NET身份验证或内置的成员资格提供程序(后者在很大程度上被前者取代)。这些内置的检查和机制可以自动重定向非授权请求以及可以调用的方法来检查授权或角色检查。 – Igor

+0

我曾见过Session在很多情况下用于查看用户是否已登录,或者如果用户没有登录,还是重定向。这被认为不合适了吗? – cmp

+0

它确实不是。您应该使用现有解决方案来检查用户尝试导航到的网站部分的授权。这会比使用会话检查用户是否通过验证要安全得多。 – Igor

回答

1

你几乎可以在会话中存储任何数据类型。使用它时,您只需将其恢复为原始数据类型即可。

//string 
Session["LoggedInOk"] = "loginOk"; 
string value = Session["LoggedInOk"].ToString(); 

//bool 
Session["LoggedInOk"] = true; 
bool value = Session["LoggedInOk"] as bool; 

//class 
Book book = new Book(); 
Session["LoggedInOk"] = book; 
Book value = Session["LoggedInOk"] as Book; 

//datatable 
DataTable table = new DataTable(); 
Session["LoggedInOk"] = table; 
DataTable value = Session["LoggedInOk"] as DataTable; 
+0

这是最有用的......谢谢! – cmp

+1

,但将大对象放在Session –

+0

@EhsanSajjad中并不是一个好习惯,因此,我应该使用一个对象来查看它们是否已登录? – cmp

1

您可以设置会话时,返回的行大于0,这意味着用户名和密码是正确的和行从表中找到:

if (dt.Rows.Count > 0) { 
    Session["LoggedIn"] = true; 
    Response.Redirect("/login/system.aspx"); 

} 

,并在该页面你检查,如果它不为空:

if(Session["LoggedIn"] == null) { 
    Response.Redirect("/login/default.aspx"); 
} 
1

建议您不要在session中存储密码。一旦您有效的用户凭证并确认您可以设置该用户有效的会话。

Session["LoggedInOk"]=true;//Set the session 

在密码访问页面上,您可以检查会话是否为空。

if(Session["LoggedInOk"] == null) 
{ 
    Response.Redirect("/login/default.aspx"); 
} 

还要确保一旦用户注销清除会话。

Session["LoggedInOk"]=null; //set session null once user click on logout 
2

使用授权或认证检查会话是不是有什么Session是专为和会被认为是不好的做法,更何况不是安全的。使用现有的身份验证/授权框架,如ASP.NET身份验证或内置的成员资格提供程序(后者在很大程度上被前者取代)。这些内置的检查和机制可以自动重定向非授权请求以及可以调用的方法来检查授权或角色检查。

根据您询问存储密码的位置/存储位置的事实,我还假设您正在推出自定义身份验证/授权解决方案。再次,不要这样做,而是使用现有的解决方案。这比你可以建立的任何东西都更安全(我自己也包括在内)。

Introduction to ASP.NET Identity

How to: Use the ASP.NET Membership Provider

+0

这是实际的答案! –

+0

嗨伊戈尔,Ehsan - 什么是会议? (如果我可能会问) – cmp

+0

@cmp - 跨特定浏览器会话请求的服务器上的临时存储。例如:如果您想添加一个向导,使用后贴片将状态从第一步推进到最后一步,则可以使用会话。使用cookie或查询字符串参数中的ID来跟踪会话,以确保检索/写入正确的状态,并且用户无需通过身份验证即可使用会话状态。 – Igor