如果多个用户访问同一页面,查询字符串值会改变吗?

时间:2014-01-13 14:16:24

标签: c# asp.net

假设我有page1.aspx和page2.aspx,我使用查询字符串将一些数据从page1发送到page2并分配给某个变量。

第2页中有一些字段,因此用户必须保留一段时间才能继续下一页(例如第3页)。

如果第二个用户也访问来自page1的page2,那么从查询字符串中获取值的page2的变量会发生变化吗?
修改
示例:我在服务器中有“txt /”,“img /”和“temp /”等文件夹,第1页有文件上传选项,用户可以上传文件,它将保存在“temp /”文件夹中。 在同一页面中有文件扩展名检查方法,对应于扩展名,信息将发送到第2页,

第1页:

string filePath;
if(extension == "txt")
 {
  filePath = "txt/";
  Response.Redirect("Page2.aspx?filePath=" + filePath + "&fileName=" + fileName);
 }
 if(extension == "png")
 {
  filePath = "img/";
  Response.Redirect("Page2.aspx?filePath=" + filePath + "&fileName=" + fileName);
 }

2页:

string fileName = HttpContext.Current.Request.QueryString["fileName"].ToString();
string filePath = HttpContext.Current.Request.QueryString["filePath"].ToString();
string savingPath = filePath + fileName;

并且第2页中有“保存”按钮以保存文件。

user1上传txt文件并进入第2页并在2分钟后单击“保存”按钮,但在用户单击“保存”按钮之前,user2上传图像文件并转到第2页。 所以现在首先将文件即txt文件保存到“img”文件夹(这是我的疑问),因为来自查询字符串的filePath变为“img /”或者所有内容都将按预期完成,这意味着txt文件将保存在“txt /”中?

3 个答案:

答案 0 :(得分:5)

查询字符串参数由浏览器存储在请求之间,它们永远不会存储在服务器上(例如,与会话变量相对)。因此,它只能是用户独立的。

每个对服务器的新请求都会创建一个新的查询字符串,并将变量与它一起传递。

我假设您正在做的是在Page2.aspx的末尾创建一个链接或按钮,其中包含您需要传递给Page3的变量。在这种情况下,将发生的是作为Page2的一部分发送的HTML将包含这些地址,浏览器将存储它们,直到用户准备好提交并使用当时的url(以及任何查询字符串参数)。 / p>

答案 1 :(得分:3)

您的问题应该更加结构化和清晰。试着举个例子。与此同时,我将尝试以我理解的方式回答您的问题。

查询字符串不是特定于用户的,它是特定于请求的含义,查询字符串参数除了查询字符串之外不在任何地方。这意味着即使相同的用户第二次访问page2到page1,原始page2中的值也不会被更改...

在mvc中共享变量的不同选项:

  1. Querystring:仅保存在查询字符串中,持续1个请求,请求特定
  2. 会话:在会话状态下在服务器上保存,持续会话期间(一般20分钟,我相信),特定于用户
  3. ViewBag / ViewData:保存在服务器上,持续1个请求,请求特定
  4. TempData:保存在服务器上,持续1个请求,但可用于跨控制器传输数据,请求特定
  5. Cookie:在客户端保留,持续时间为Cookie,用户特定=>应该尽可能避免

答案 2 :(得分:2)

根据您上面的特定情况,user1和user2之间的查询字符串值将完全独立。这意味着user1上传的第一个文件将保存到/txt文件夹,user2上传的第二个文件将保存到/img文件夹。

但是,如果user1和user2都使用完全相同的名称上传文件,请说abc.txt,那么user1将覆盖user1中的第一个文件。您需要检查第1页中是否存在上传的文件名以避免这种情况。我建议通过添加一些递增的数字来重命名上传的文件名。例如,如果user1刚刚在page1中上传了abc.txt,那么当user2稍后上传abc.txt时,请将文件名更改为abc-1.txt,或者更改为abc-2.txt if {{ 1}}也存在等等。希望有所帮助。