无法在session-asp.net中分配值

时间:2011-07-28 07:06:30

标签: c# .net asp.net sql session

只是想学习asp.net 我能够登录并重定向到default.aspx。 我试图检查用户的usere名称和密码是否正确来自数据库(能够做到)。 现在我想在会话中存储用户名(无法做到,这里我得到nullpointer / value错误)并在下一页/重定向页面上将此会话值显示为欢迎消息。我的代码如下:

protected void Button1_Click(object sender, EventArgs e)
{
    SqlDataReader dr;
    SqlConnection con = new SqlConnection("Data Source=xxxx-pc\\ddd;Initial Catalog=db_Login;User Id=sd;Password=ds;");
    con.Open();
    SqlCommand com = new SqlCommand("select password from tab_userinformation where Username='" + txt_uname.Text + "'", con);
    dr = com.ExecuteReader();
    if (dr.HasRows)
    {
        dr.Read();

        if (dr[0].ToString() == txt_pwd.Text)
        {
            Response.Redirect("default_Page.aspx");
            //Response.Redirect("erp.htm");
            Session["user"] = txt_uname.Text;

这里我得到的对象引用未设置为Session [“user”]

的对象异常的实例

任何建议 谢谢!

5 个答案:

答案 0 :(得分:5)

因为在为会话分配值之前,您正在重定向到另一个页面。

Response.Redirect("default_Page.aspx");
//Response.Redirect("erp.htm");
Session["user"] = txt_uname.Text; // this is not executing...

您必须在重定向到页面之前指定值。 e.g。

Session["user"] = txt_uname.Text; // this is not executing...
Response.Redirect("default_Page.aspx");
//Response.Redirect("erp.htm");

答案 1 :(得分:2)

在重定向之前将值存储在会话中:

Session["user"] = txt_uname.Text;
Response.Redirect("default_Page.aspx");

这样你就不会失去txtuname.Text的价值。

此外,您应该为SQL使用参数化查询 - 您目前拥有它的方式,您可以接受SQL注入攻击。

答案 2 :(得分:1)

检查:

  • 在aspx中有一个文本控件,其id =“txt_uname”
  • 确保此文本控件具有runtat = server。

答案 3 :(得分:0)

上面的代码应该是这样的:

if (dr[0].ToString() == txt_pwd.Text)
    {
        Session["user"] = txt_uname.Text;
        Response.Redirect("default_Page.aspx");

这会奏效。一旦重定向到其他页面,控件就不会返回“redirec”之后的语句。因此他们没有被执行。而是“default_Page”的页面加载内的语句将开始执行

答案 4 :(得分:0)

Response.Redirect()之后的语句不会被执行,因为此(重定向)方法将用户转移到另一个页面。

建议:不要使用硬编码的sql字符串。使用参数化的sql语句或存储过程。

string password=string.Empty;
using(SqlConnection con = new SqlConnection("Data Source=xxxx-pc\\ddd;Initial Catalog=db_Login;User Id=sd;Password=ds;"))
{
    using(SqlCommand com = new SqlCommand("select password from tab_userinformation where Username=@p1", con))
    {
        com.Parameters.AddWithValue("@p1",txt_uname.Text);
        con.Open();
        object retValue=com.ExecuteScalar();
        if(retValue!=null)
        {
            password=retValue.ToString();
        }
        con.Close();
    }
}

if (!string.IsNullOrEmpty(password))
{
    if (password== txt_pwd.Text)
    {
        Session["user"] = txt_uname.Text;
        Response.Redirect("default_Page.aspx");
    }

}