需要在一般处理程序中获取一个前一页面的值,利用session传递,按照网上的教程,添加了引用和接口,大致代码如下
<%@ WebHandler Language="C#" Class="UploadHandler" %> using System; using System.Web; using System.IO; using System.Configuration; using System.Data.SqlClient; using System.Web.SessionState; public class UploadHandler : IHttpHandler,IRequiresSessionState { int fileMaxSize =50* 1024 * 1024;//单位为B public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Charset = "utf-8"; HttpPostedFile file = context.Request.Files[0]; //string uploadPath = HttpContext.Current.Server.MapPath(@context.Request["folder"]) + "\\"; string UserName = context.Session["UName"].ToString();
已经添加了using System.Web.SessionState;和IRequiresSessionState接口,但还是提示获取到的为空,有人遇到过相似的问题吗,求大神解决
终于找到原因了,“是因为上传文件的部分是用flash上传文件的后台处理类,flash和后台交互的时候会重新分配ASP.NET_SessionId.导致页面会话和flash会话ID不同。所以会被认为是两个不同的浏览器请求,自然session不同,无法取到值“。
后来用IE测试后却一切正常。
感谢那位热心的网友,也感谢各位的热心解答。
不过查了好多资料后发现也有解决方案,发现很复杂,很复杂,正在慢慢学习,消化中
再次感谢各位。
谁知道你的这个Session是在哪儿赋值的?
已补充
@梦夜月: 貌似原来好多人都是因为存完Session就跳转遇到了你这样的问题。。你网上找一下吧。。。
@顾晓北: 好吧
HttpContext.Current.Session["UName"];
还是为空
有可能是在给Session赋值的时候,没赋值进去,你调试一下赋值给session,看那是不是赋了为null的值进去
1.你是先给session赋值后再取得吧?
2.判断context.Session["UName"]是否为空,如果不为空,可以调试一下看看值是什么;
不是,是登陆后设置的缓存,调试时前面一切正常
@梦夜月: 可以在这之前判断context.Session["UName"]是否为空
if(context.Session["UName"]==null)
{//在这打断点
}
@火悬崖: 这个之前调试过了,是跳到else部分,获取的值为空
@梦夜月: 值为空?
这个存的时候是什么,调试了吗?
@火悬崖: 这是后来测试时添加的,正常时是从登陆时设置的缓存,已经找到原因了,也很感谢你的热心帮助
@梦夜月: 能请教一下是什么原因吗?谢谢
@火悬崖: 刚找到的 http://www.cnblogs.com/fumj/archive/2012/11/30/2795990.html