这是我第一次在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;
}
答案 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;
}