会话值在回发和页面刷新时变为空

时间:2011-05-03 07:03:42

标签: c# asp.net visual-studio session

在我的网页中,我无法在帖子后面和页面resfresh上获取会话变量。

问题是

如果页面不是IsPostback,那么我就能得到会话变量。 但如果页面回发则会出现错误。

当我将任何文件上传到服务器时出现此错误。我正在使用asynchfileupload上传图像并将其存储到会话变量中。然后在按钮上单击我将数据保存到目录。

但并非经常发生。

这是我的代码

protected void AsynImageLoader_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
    {
        if (AsynImageLoader.PostedFile != null)
        {
            string extension = System.IO.Path.GetExtension(AsynImageLoader.PostedFile.FileName);

            if (extension == ".jpg" || extension == ".gif" || extension == ".jpeg" || extension == ".png")
            {
                HttpPostedFile file = AsynImageLoader.PostedFile;
                Session["TempImage"] = ReadFile(file);
            }
        }
    }

点击按钮

       var storedImage = Session["TempImage"] as byte[];
       String Strthumbpath = Server.MapPath("content\\thumbnail\\");
       if (storedImage != null)
       {
           System.Drawing.Image image = GetImage(storedImage);

           if (image != null)
           {
           image.Save(Strthumbpath + strFileName);
           }

           }
///inserting values to datbase.
在pomuch谷歌搜索后,我读到当任何文件添加到任何子目录或编辑webconfig时将导致应用程序重新启动。

如果是这样我怎么能解决这个问题..

提前感谢。

2 个答案:

答案 0 :(得分:1)

好吧,我刚刚使用ASP.NET MVC测试过,它对我来说很好。 我做的是疯狂两个动作,一个用于设置会话变量,另一个用于创建文件,所以我已经修改了默认的asp.net mvc应用程序家庭控制器:

  public ActionResult Index()
    {
        ViewBag.Message = Session["Sample"];            

        return View();
    }

    public ActionResult About()
    {
        return View();
    }

    public ActionResult AddSessionVariable()
    {
        Session["Sample"] = "Sample session variable";
        return RedirectToAction("Index");
    }

    public ActionResult CreateFile()
    {
        var bmp = new Bitmap(100, 100);            
        bmp.Save(Server.MapPath(string.Format(@"\Images\{0}", DateTime.Now.Ticks)));
        return RedirectToAction("Index");
    }

所以,当我转到AddSessionVriable时,它会向会话添加内容,索引操作会将会话变量呈现给页面,我可以看到,它没有消失。然后我去创建文件,我的会话变量仍然存在,因此不会重新启动应用程序。我很确定,Web窗体应用程序的工作方式相同,可能是在保存文件并重新启动应用程序时丢失了一些异常(例如,由于缺少权限)。

答案 1 :(得分:0)

不要将上传的文件保存在Web应用程序的虚拟文件夹中。

这也降低了安全风险(现在,人们可能会上传一个asp页面,包括嵌入式代码,如果他们可以制作URL(这可能很简单)就可以访问它。)