asp.net。初学编程 ,求如何通过读取Session或者Cookies中的用户名
然后下面这个imageUp.ashx接收
主要是imageUp.ashx如何获得Cookies的用户名?然后pathbase = 用户名+"/" ;
<%@ WebHandler Language="C#" Class="imageUp" %>
<%@ Assembly Src="Uploader.cs" %>using System;
using System.Web;
using System.IO;
using System.Collections;public class imageUp : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";        //上传配置
        int size = 2;           //文件大小限制,单位MB                             //文件大小限制,单位MB
        string[] filetype = { ".gif", ".png", ".jpg", ".jpeg", ".bmp" };         //文件允许格式
        //上传图片
        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;
        }
    }}ASP.NETsessionCookieashx

解决方案 »

  1.   

    http://www.google.com.hk/search?hl=zh-CN&q=.net+IRequiresSessionState
      

  2.   

    对于cookie,你可以直接通过 context.Request.Cookies 和 context.Response.Cookies 访问,跟别的asp.net程序没有半点不同啊?!
      

  3.   

    可以Cookie+Session共同完成,写两个页面分别叫Cookie1和Cookie2,Cookie1页面如下图为“登录”按钮Click事件函数添加代码    protected void Button1_Click(object sender, EventArgs e)
        {
            HttpCookie cookie = Request.Cookies["chp6"];
            string sid;        if (cookie != null)
            {
                sid = cookie["sid"];
            }
            else
            {
                cookie = new HttpCookie("chp6");            Guid gid = new Guid();
                sid = gid.ToString();
                cookie["sid"] = sid;
            }        Session[sid] = tbUserName.Text;        cookie.Expires = DateTime.Now.AddMinutes(30);
            Response.Cookies.Add(cookie);        Response.Redirect("~/Cookie2.aspx");
        }为了简便,Cookie2页面只有一个Label控件,起名为lbUserName,再为Cookie2页面的Page_Load事件添加如下代码    protected void Page_Load(object sender, EventArgs e)
        {
            HttpCookie cookie = Request.Cookies["chp6"];        if (cookie != null)
            {
                string sid = cookie["sid"];
                string uname = Session[sid] as string;            lbUserName.Text = uname == null ? "未登录" : uname;
            }
            else
                lbUserName.Text = "未登录";
        }在Cookie2页面中就能看到在Cookie1里输入的用户名了,我这里为了省事直接将string对象存入Session,实际工作中最好是存储一个Dictionary对象,这样就能存储更多的信息了
      

  4.   

    谢谢花时间弄这个,没有解决偶的问题,貌似。
    但由此也可以学一点别的,所以还是很感谢哈
    ps:偶的问题是ashx文件怎么接收cookie或者Session的值,假定这个值在登录得时候生成了,ashx文件如何得到他?
      

  5.   

    似乎不行的可否贴个简单的测试通过例子?(客户端aspx创建了cookie或者Session,ashx文件获取它,并付给一个字符串变量)
      

  6.   

    首先的ashx中的类要继承 IReadOnlySessionState 接口。然后在 ProcessRequest 事件中这样获取Cookie和Session
    context.Request.Cookies["id"];
    context.Session["id"];
      

  7.   


    应该继承 IRequiresSessionState 接口。
      

  8.   

    谢谢诶。。早上好。
    【有空可否贴更多的代码,我想看看是不是我在别的地方弄错了】
    另外ashx文件除了通过ajax等提交外,可否像aspx一样取到值【即核心问题是:ashx是否只能透过提交给他的操作来获取获取Cookie和Session?】
      

  9.   

    ashx文件也是一样,只不过cookie是从context.Request.Cookies里获取
      

  10.   


    这个是肯定的,如果你的提交页面不是它,它肯定无法处理。
    还有,在ashx页面里面,因为没有Page类,所以获取Request和Response对象需要通过HttpContext来获取。using System;
    using System.Collections.Generic;
    namespace Netstars
    {
    /// <summary>
        /// AjaxForm 的摘要说明
        /// </summary>
        public class AjaxForm : IHttpHandler,IRequiresSessionState
        {
            public void ProcessRequest(HttpContext context)
            {
                //在这里面写处理方法
            }
        }
    }
      

  11.   


    这个是肯定的,如果你的提交页面不是它,它肯定无法处理。
    还有,在ashx页面里面,因为没有Page类,所以获取Request和Response对象需要通过HttpContext来获取。using System;
    using System.Collections.Generic;
    namespace Netstars
    {
    /// <summary>
        /// AjaxForm 的摘要说明
        /// </summary>
        public class AjaxForm : IHttpHandler,IRequiresSessionState
        {
            public void ProcessRequest(HttpContext context)
            {
                //在这里面写处理方法
            }
        }
    }

    哦,也就是说只在提交的瞬间能读取到,过后即使Cookie和Session还在他也读取不了(最重要的疑问。。)?
    下次提交中还要带着Cookie和Session提交过去,否则就获取不到是不是这个Cookie和Session不是一直都在的嘛?如果像aspx,就是随时可以读取的吧(但愿我没有弄错)ashx执行到这里,不就是去读取Cookie和Session么,这个Cookie和Session不是还在的嘛,怎么会读不到了?
    新人思维,求解。。不胜感激涕零想了想觉得意思是:客户端提交到这个页面,但是提交中没有带Cookie和Session的参数。这样他可以获取到客户端已存在的Cookie和Session吗?
      

  12.   

    一般处理程序,需要继承一下IReadOnlySessionState 接口,这样才能实现session。获取session或cookies通过键值去
      

  13.   

    谢谢,这个偶弄了好久,头疼得很
    想了想觉得意思是:客户端提交到这个页面,但是提交中没有带客户端Cookie和Session的参数。这样他可以获取到已存在的Cookie和Session吗?
      

  14.   


    你对ASP.NET的构成和页面的生命周期这些知识严重缺乏。ashx和asp.net其实很像,无非是aspx页面绑定在page类中,并且有一个html页面供他解析。而ashx页面没有Page类,但是解析过程和执行过程和aspx页面没有区别。还有Cookie和Session的使用方法您估计也没弄清楚。Cookie是依赖于客户端的,每次提交访问页面都会把Cookie发送给服务器端,这样服务器端才能读取到,而且必须是所请求的页面才能读取(Http协议是无状态协议),Session是依赖于Cookie的,在Cookie中储存Session的ID,每次请求页面,同样将Session的ID提交给服务器,这样服务器才能通过Session的ID获取Session值。所以,你所谓的客户端不提交Cookie和Session的参数,服务器端当然无法获取了。
      

  15.   

    客户端提交到这个页面,但是提交中没有带客户端Cookie和Session的参数。这样他可以获取到已存在的Cookie和Session的值吗?
      

  16.   


    你对ASP.NET的构成和页面的生命周期这些知识严重缺乏。ashx和asp.net其实很像,无非是aspx页面绑定在page类中,并且有一个html页面供他解析。而ashx页面没有Page类,但是解析过程和执行过程和aspx页面没有区别。还有Cookie和Session的使用方法您估计也没弄清楚。Cookie是依赖于客户端的,每次提交访问页面都会把Cookie发送给服务器端,这样服务器端才能读取到,而且必须是所请求的页面才能读取(Http协议是无状态协议),Session是依赖于Cookie的,在Cookie中储存Session的ID,每次请求页面,同样将Session的ID提交给服务器,这样服务器才能通过Session的ID获取Session值。所以,你所谓的客户端不提交Cookie和Session的参数,服务器端当然无法获取了。谢谢。如此可否理解为当提交东西到这个页面的时候,Cookie和Session已经被带来了,只要在这个页面按格式编写代码就可以取到值了嘛?
      

  17.   


    是的,你可以通过一些工具查看,每次你打开一个页面时,会附加Cookie的值,这个值对用户是透明的,它是自动提交给服务器的,服务器通过Cookie的值进行Cookie获取或者是Session的获取。注意,Cookie是写在客户端的,Session是写在服务器端的。只不过是Session需要依赖Cookie的某些值才能区分用户。在asp.net中,Session可以设置为不依赖于Cookie,其中实现的原理没研究过。
      

  18.   


    是的,你可以通过一些工具查看,每次你打开一个页面时,会附加Cookie的值,这个值对用户是透明的,它是自动提交给服务器的,服务器通过Cookie的值进行Cookie获取或者是Session的获取。注意,Cookie是写在客户端的,Session是写在服务器端的。只不过是Session需要依赖Cookie的某些值才能区分用户。在asp.net中,Session可以设置为不依赖于Cookie,其中实现的原理没研究过。
    谢谢兄弟,你的耐心解答,尤其是最近这两次,特别提的是倒数第二次,给我的启发,然后验证成功了并顺利把问题解决了。
    偶是初学编程的水准,很多东西都不懂是真真正正的不懂
    非常非常感谢(一个是耐心一个是详细一个是帮了我的大忙)。。
      

  19.   

    imageUp:IHttpHandler:IRequiresSessionState