小光网络技术博客

介绍和研究搜索引擎优化、SEO、asp、asp.net、php、jsp技术

« php用array建立数组HttpRuntime.Cache 与HttpContext.Current.Cache »

Cookie的问题

Cookie的问题:

首先看一下我的Cookie存取代码 (这个Cookie操作支持二级域名访问)
#region 存取Cookie
    
/// <summary>
    
/// 存Cookie
    
/// Json Lee 2007-09-24
    
/// </summary>
    
/// <param name="strName">名称</param>
    
/// <param name="strValue"></param>
    
/// <param name="expDate">到期时间</param>
    
/// <returns></returns>        
    public void SetCookie(string cookieName, string cookieValue, int cookieExpiryMinute)
    {
        cookieName 
= cookieName.ToLower();
        HttpCookie cookie 
= new HttpCookie(cookieName,cookieValue);
        cookie.Expires 
= DateTime.Now.AddMinutes(cookieExpiryMinute);  //设置Cookie过期时间
        cookie.Path = "/";     
       
//设置可访问Cookie的路径 为项目下的cookie文件夹及其子文件夹下所有页面
        //如果需要整个应用程序可访问 则设置为cookie.Path = "/";即可 
        cookie.Domain 
= ".163.com";      
       
//以www.163.com为例,若要在 news.163.com等不同主机访问可以如上设置        

        
//删除旧的同名Cookie
        HttpContext.Current.Response.Cookies.Remove(cookieName);

        HttpContext.Current.Response.Cookies.Add(cookie);
    }

    
/// <summary>
    
/// 存Cookie
    
/// Json Lee 2007-09-24
    
/// </summary>
    
/// <param name="strName">名称</param>
    
/// <param name="strValue"></param>
    
/// <returns></returns>
    public void SetCookie(string cookieName, string cookieValue)
    {
        SetCookie(cookieName, cookieValue, 
60);
    }

    
/// <summary>
    
/// 清除Cookie
    
/// </summary>
    
/// <param name="strName">名称</param>
    
/// <returns></returns>
    public void ClearCookie(string cookieName)
    {
        SetCookie(cookieName,
"",-5);
    }

    
/// <summary>
    
/// 取Cookie
    
/// Json Lee 2007-09-24
    
/// </summary>
    
/// <param name="strName">名称</param>
    
/// <param name="strDefaultValue">当没有值的时候的默认值</param>
    
/// <returns></returns>
    public string GetCookie(string cookieName, string defaultValue)
    {
        cookieName 
= cookieName.ToLower();
        
string strResult = defaultValue;
        
try
        {
            
if (HttpContext.Current.Request.Cookies != null)
            {
                
if (HttpContext.Current.Request.Cookies[cookieName] != null)
                {
                    strResult 
= HttpContext.Current.Request.Cookies[cookieName].Value;
                }
            }
        }
        
catch (Exception ex)
        {
            
this.WriteWrongLog(ex);
        }

        
return strResult;
    }

    
/// <summary>
    
/// 取Cookie
    
/// Json Lee 2007-09-24
    
/// </summary>
    
/// <param name="strName">名称</param>
    
/// <returns></returns>
    public string GetCookie(string strName)
    {
        
return GetCookie(strName, "");
    }
    
#endregion

Cookie存取看起来的确很简单,而在.NET里面好像更简单。
但是......................
往往简单的东西经常出现一些问题,让人找不到原因。
我之前这里出现的问题就是,在写Cookie的时候,没有处理旧的同名Cookie,例如:第一次登录的时候写入 Cookie username=jsonlee 和 password=123456
有时候有可能会在未退出的情况下重新登录一下,这样就会再次写入同样的Cookie,但这样的情况,好像没有把原来的覆盖(我用 IECookies 这个工具看到的),而是新加入一个同名的。这样一来明显问题就存在了。
所以我在SetCookie的方法里面加入了
//删除旧的同名Cookie       
HttpContext.Current.Response.Cookies.Remove(cookieName);
这样一来问题就解决了。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Sam

Copyright 2007-2008 小光. Some Rights Reserved.