这是在asp.net页面之间传递变量的好方法

时间:2014-04-27 12:32:22

标签: c# asp.net

这是我第一次在asp.net项目中的两个页面之间传递变量。 它有效,但我想知道这是否是一个好方法呢?它安全吗?有没有更好的办法? 我问的原因是我已经学会了从不在sql中使用连接,而是使用参数(我从现在开始总是这样做)。在这种情况下是否存在类似的风险?

在网页1中:

    protected void Button1_Click(object sender, EventArgs e)
    {
        string email = txtEmail.Text;
        string date = txtDate.Text;
        string time = txtTime.Text;
        string name = txtName.Text;

        string url = "~/change.aspx?newemail="+mail+"&newdate="+date+"&newtime="+time+"&newname="+name+"";
        Response.Redirect(url);
    }

在网页2中:

    protected void Page_Load(object sender, EventArgs e)
    {
        String email = Request.QueryString["newemail"];
        String date = Request.QueryString["newdate"];
        String time = Request.QueryString["newtime"];
        String name = Request.QueryString["newname];
        TextBox1.Text = email;
        TextBox2.Text = date;
        TextBox3.Text = time;
        TextBox4.Text = name;
    }

4 个答案:

答案 0 :(得分:5)

  

如果这是一个好方法吗?

不是真的。您需要对值进行url编码,因为如果它们包含特殊字符,则接收页面将无法正确解析它们:

string url = "~/change.aspx?" + 
"newemail=" + HttpUtility.UrlEncode(mail) + 
"&newdate=" + HttpUtility.UrlEncode(date) + 
"&newtime=" + HttpUtility.UrlEncode(time) + 
"&newname=" + HttpUtility.UrlEncode(name);
  

安全吗?

不,一点也不。任何人都可以向您的目标页面发送一个请求,其中包含他觉得对他有益的任何值。

  

有更好的方法吗?

这取决于您的具体要求以及您传输的信息是否敏感。如果它是敏感信息,那么您可以考虑将值存储在服务器上,而不是将它们作为查询字符串参数传递。例如,您可以将ASP.NET会话用于此目的。

答案 1 :(得分:2)

安全吗?不,当然不是,值是在发送到浏览器的查询字符串上。如果要保证其安全,请将值放在服务器端的会话中。

答案 2 :(得分:2)

您正在使用QueryString方法将变量从一个页面传递到另一个页面。如果参数不安全就不会出现问题,因为您无法通过安全信息(敏感信息),如密码,任何重要的ID ......

如果你想处理安全参数(敏感信息),你可以使用Sessions,Cookies ..

在你的情况下,你传递的名字。我希望它不会产生任何问题,因为这不是安全的参数(敏感信息)。即使你觉得任何安全风险,你可以使用加密和解密概念,如加密你的参数名称和用url传递它,然后解密你想要使用的参数。

参考:

http://msdn.microsoft.com/en-us/library/6c3yckfw%28v=vs.100%29.aspx

http://www.codeproject.com/Articles/8055/Transferring-page-values-to-another-page

为了更好地理解将变量从一个页面传递到另一个页面

答案 3 :(得分:2)

谢谢你们的帮助! 我现在已将其更改为Sessions。我的代码现在看起来像这样:

在网页1中:

        string email = txtEmail.Text;
        string date = txtDate.Text;
        string time = txtTime.Text;
        string name = txtName.Text;

        Session["email"] = email;
        Session["date"] = date;
        Session["time"] = time;
        Session["name"] = name;

        Response.Redirect("~/change.aspx");

在网页2中:

       protected void Page_Load(object sender, EventArgs e)
       {
        string email = (string)(Session["email"]);
        string date = (string)(Session["date"]);
        string time = (string)(Session["time"]);
        string name = (string)(Session["name"]);

        TextBox1.Text = email;
        TextBox2.Text = date;
        TextBox3.Text = time;
        TextBox4.Text = name;
    }