首先看一下我的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
/// <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);
这样一来问题就解决了。HttpContext.Current.Response.Cookies.Remove(cookieName);