我只是制作一个非常简单的密码输入表格:
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 :(得分:2)
使用会话进行授权或身份验证检查不是Session
的设计目标,并且被认为是不好的做法,更不用说不安全了。使用现有的身份验证/授权框架,如ASP.NET Identity或内置的成员资格提供程序(后者已基本上被前者替换)。这些内置的检查和机制可自动重定向未授权的请求,以及您可以调用以检查授权或角色检查的方法。
基于您询问存储密码的位置/事实,我还假设您正在推出自定义身份验证/授权解决方案。同样,不要这样做,而是使用现有的解决方案。这比你可能构建的任何东西都更安全(包括我自己)。
答案 1 :(得分:1)
您几乎可以在会话中存储任何数据类型。您只需要在使用它时将其强制转换为原始数据类型。
let responseDictionary:[String:Any] = WebAPIHelper.postMethodRequest(parameters: requestParameters, methodName: "/User/SendEmail")
答案 2 :(得分:1)
当返回的行大于0时,您可以设置Session,这意味着密码和用户名都正确,并且从表中找到了行:
if (dt.Rows.Count > 0) {
Session["LoggedIn"] = true;
Response.Redirect("/login/system.aspx");
}
并在该页面中检查它是否为空:
if(Session["LoggedIn"] == null) {
Response.Redirect("/login/default.aspx");
}
答案 3 :(得分:1)
建议您不要在会话中存储密码。一旦您有效用户凭据并确认您可以设置用户有效的会话。
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