最近一个项目用了ueditor 感觉还不错, 但在使用文件上传功能时,想通过获取session来获得当前用户的信息并判定是否具有上传权限,尝试了在ueditor文件上传的处理源文件uploader.cs中获取HttpContext.Current.Session["userName"].ToString();但获取失败了, 请教有没有遇到过类似问题的大牛,如何解决这个问题呢.ueditor session

解决方案 »

  1.   

    如果是ashx,你需要继承IRequiresSessionState接口
      

  2.   

    这和IRequiresSessionState接口 无关。。继承了之后在FF和chrome中也是不能直接获取到session的。正在研究怎么弄。有大神有经验的请一定告之。谢谢。
      

  3.   


    那你为什么非得在upload.cs里判断呢?你可以在imageUp.ashx里判断啊<%@ WebHandler Language="C#" Class="imageUp" %>using System;
    using System.Web;
    using System.IO;
    using System.Collections;
    using System.Web.SessionState;
    public class imageUp : IHttpHandler, IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";        //上传配置
            int size = 2;           //文件大小限制,单位MB                             //文件大小限制,单位MB
            string[] filetype = { ".gif", ".png", ".jpg", ".jpeg", ".bmp" };         //文件允许格式        string username = context.Session["userName"].ToString();
            if (!HasRight(username))
            {
              //提示没有权限
            }
            //上传图片
            Hashtable info = new Hashtable();
            Uploader up = new Uploader();        string pathbase = null;
            int path = Convert.ToInt32(up.getOtherInfo(context, "dir"));
            if (path == 1)
            {
                pathbase = "upload/";        }
            else
            {
                pathbase = "upload1/";
            }        info = up.upFile(context, pathbase, filetype, size);                   //获取上传状态        string title = up.getOtherInfo(context, "pictitle");                   //获取图片描述
            string oriName = up.getOtherInfo(context, "fileName");                //获取原始文件名
            HttpContext.Current.Response.Write("{'url':'" + info["url"] + "','title':'" + title + "','original':'" + oriName + "','state':'" + info["state"] + "'}");  //向浏览器返回数据json数据
        }    public bool IsReusable
        {
            get
            {
                return false;
            }
        }}
      

  4.   


    那你为什么非得在upload.cs里判断呢?你可以在imageUp.ashx里判断啊
            string username = context.Session["userName"].ToString();
            
    报告大神,我就是直接在ashx中执行的呀。这句代码,在ff中,直接不能执行,未将对象引用到对象的实例。。据传在IE下可以,未测试。我已经试了N遍了。。context.Session["userName"].ToString();和HttpContext.Current.Session["userName"].ToString();都是不行的哦。然后查看此时的seesionID,和我浏览器上保存的根本不同。cookie和session都是无效的。目前之能通过URL传值来暂时回避这个问题。
      

  5.   

    if(context.session["username"]!=null){
    string  username=context.session["username"].tostring()
    }这么写才对
      

  6.   

    我这样用的就是udedit,在imageUp.ashx下用HttpContext.Current.Session["user"].ToString()可以获取值,前提是继承IRequiresSessionState接口。using System.Web.SessionState;
    public class imageUp : IHttpHandler,IRequiresSessionState
    {
    ……
    }
      

  7.   

    你继承了public class imageUp : IHttpHandler, IRequiresSessionState这两个接口了吗??
      

  8.   

    我的也是这么写的,但是在火狐下session和cookie都是获取不到的。您用的是什么浏览器呢?
      

  9.   

    不需要Session集合。你可以在用户登录时把用户id写到cookie中,然后你后台处理程序应该读取 context.Request.Cookies["uid"].Value
    如果你觉得直接把用户的id保存到cookie中是“泄密”,那么你可以在后台数据库中随机产生一个Guid字符串方式“授权号”,并且把此授权号跟真实的uid对应关系保存到数据库中。这样用户就算是假冒登录,它也不知道应该假冒一个什么授权号才好。
      

  10.   


    还有这种事?那么你的这个所谓 ueditor 是个 ActiveX插件?有这种bug的东西就不要用了。
      

  11.   

    我的也是这么写的,但是在火狐下session和cookie都是获取不到的。您用的是什么浏览器呢?
    IE10\IE9\IE8 火狐最新版,google最新版都没问题。