public class PSOCookie
    {
        HttpContext context;
        HttpCookie clientCookie = new HttpCookie("ClientUser");        public DateTime ExpiresTime
        {
            get;
            set;
        }        /// <summary>
        /// 构造函数,初始化HttpContext,设置默认过期时间1天
        /// </summary>
        /// <param name="paraContext">客户端HttpContext</param>
        public PSOCookie(HttpContext httpContext)
        {
            context = httpContext;
            this.ExpiresTime = DateTime.Now.AddDays(1);
        }        /// <summary>
        /// 添加用户信息到Cookie中
        /// </summary>
        /// <param name="cookieInfo"></param>
        public void AddUserCookie(BEL.UserCookieInfo cookieInfo)
        {
            clientCookie.Expires = this.ExpiresTime;
            //加密保存
            clientCookie["UserID"] = xxtea.Encrypt(cookieInfo.UserID);
            clientCookie["UserName"] = xxtea.Encrypt(cookieInfo.UserName);
            clientCookie["UserNum"] = xxtea.Encrypt(cookieInfo.UserNumber);
            context.Response.Cookies.Add(clientCookie);
        }        /// <summary>
        /// 添加用户信息到Cookie中
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="userName"></param>
        /// <param name="userNum"></param>
        public void AddUserCookie(string userID,string userName,string userNum)
        {
            BEL.UserCookieInfo cookieInfo = new BEL.UserCookieInfo(userID, userName, userNum);
            AddUserCookie(cookieInfo);
        }        /// <summary>
        /// 删除cookie中的用户信息
        /// </summary>
        public void DeleteUserCookie()
        {
            clientCookie.Expires = DateTime.Now.AddDays(-1);
            clientCookie["UserID"] = string.Empty;
            context.Response.Cookies.Add(clientCookie);
        }        /// <summary>
        /// 获取cookie中的用户ID,用户名和用户在线编号
        /// </summary>
        /// <returns>登录用户实体类</returns>
        public BEL.UserCookieInfo GetCookieUserInfo()
        {
            //客户端Cookie是否存在
            HttpCookie cookie = context.Request.Cookies["ClientUser"];
                       
            if (cookie != null)
            {
                //解密用户信息返回
                BEL.UserCookieInfo userCookieInfo = new BEL.UserCookieInfo();
                userCookieInfo.UserID = xxtea.Decrypt(cookie["UserID"]);
                userCookieInfo.UserName = xxtea.Decrypt(cookie["UserName"]);
                userCookieInfo.UserNumber = xxtea.Decrypt(cookie["UserNum"]);                return userCookieInfo;
            }
            else//不存在返回空引用
            {
                return null;
            }
        }
    }   在继承IHTTPModuel的PSO中调用        void context_AcquireRequestState(object sender, EventArgs e)
        {
            HttpApplication app = sender as HttpApplication;
            HttpContext context = app.Context;         PSOCookie psoCookie = new PSOCookie(context);                      BEL.UserCookieInfo userCookieInfo = new UserCookieInfo();
                      userCookieInfo.UserID = "10"                      userCookieInfo.UserName = "Leo"                      userCookieInfo.UserNumber = string.Empty;                      psoCookie.ExpiresTime = DateTime.Now.AddDays(1);                      psoCookie.AddUserCookie(userCookieInfo);      } 为何不能在客户端写入Cookie呢, 再次读取还是空的?有哪位知道原因呢?

解决方案 »

  1.   

    public DateTime ExpiresTime 
            { 
                get; 
                set; 
            } 
    这里是故意简写的?!
      

  2.   

    每次添加cookie值时 都应该从context.request里面读取当前cookie并设置(如果为null则新建一个cookie对象)
    我在你的代码里面没有见到新建cookie对象的迹象
      

  3.   

    见到了 在最开始那里呢....
    那企不是每次都是一个新的cookie??之前的cookie根本就没有作用吖.....
      

  4.   

    你在PSOCookie 类的最开始处新建了cookie对象
    每次实例化的时候都是新建的这个cookie对象
    然后你再调用这个类里面的GetCookieUserInfo方法来读这个刚刚新建的对象
    里面的信息(如果在"本次"使用中还没有进行设置)就一定是取不到的啊
      

  5.   

    HttpModule是每次请求都会发生操作的,
    读取cookies有点类似于post过来的数据,你每次取的都是上一次的数据吧
      

  6.   

    我说的不对了..每次取的时候是context.Request.Cookies["ClientUser"]