2011-05-03 106 views
2

在我的网页中,我无法在回发和页面刷新时获取会话变量。在回发和页面刷新时会话值变为空

问题是

如果页面没有的IsPostBack那么我就能够获取会话变量。 但是,如果页面回发,然后出现错误。

这个错误是当我上传任何文件到server.I使用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. 

后somuch谷歌上搜索我读到,当任何文件被添加到任何子目录或编辑webconfig会引起导致应用程序重新开始。

如果是这样,我该如何解决这个问题..

在此先感谢。

回答

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窗体应用程序的工作方式相同,可能是因为在保存文件时丢失了一些异常(例如由于缺少权限)并重新启动应用程序。

0

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

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

+0

谢谢sehe ....这个网站是用于广告的网站,用户上传图片,音频,video.so,我可以保存files.and访问该文件以外的virtaul目录。(我正在检查文件扩展名保存前未加载文件); – 2011-05-03 08:07:13