最近老是发现在IE里会有Cookie的问题,如IE下面无法登出,或无法登录,或者登录后信息却无法取到,而Firefox下面一直是通过的,都试过好多次了,今天终于找回的主要的原因;

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); 这样一来问题就解决了。

  IE页面缓存的问题:

  我现在的用户登录状态是通过 Ajax调用一个 GetUserBar.aspx 来取得用户状态栏信息的
以下是 GetUserbar.aspx 的代码
〈%@ Page language="c#" Codebehind="GetUserBar.aspx.cs" AutoEventWireup="false" Inherits="Web.GetUserBar" %〉
〈%if(CheckIsLogin()){%〉
您好:〈%=this.GetNickname()%〉
〈a href="〈%=UrlRewriteLink.GetUserHomeUrl()%〉"〉您的主页〈/a〉 |
〈a href='/user/user_setup.aspx'〉个人设置〈/a〉 |
〈a href='/logout.aspx'〉退出〈/a〉
〈%}else{%〉
〈span style="margin-right:10px; "〉您已经登录了!〈/span〉〈a href="/reg.aspx"〉注册〈/a〉 | 〈a href="/login.aspx"〉登录〈/a〉
〈%}%〉

  如上面这段代码,如果通过Ajax调用它,哪就可以在静态页面上取得用户的登录信息
可是.......
  这个问题就出来了,而且还不容易发现,哪就是IE的页面缓存,IE好像有个机制会把访问过的页面缓存到 C:\Documents and Settings\用户名\Local Settings\Temporary Internet Files 这个文件夹里面。所以每个Ajax调用的GetUserBar.aspx时候IE取到的都是缓存信息,而不是GetUserBar.aspx运行的结果。所以才出现了,一直无法登出或无法登录的状态(其实是已经登录登出了的,只是表面上看不出来)。

  解决办法就是在 GetUserBar.aspx 的Page_Load方法里面加入设定"Response.Expires"的时间的处理,如:
private void Page_Load(object sender, System.EventArgs e)
{
this.Response.Expires = 0;

}

  这样问题就解决了。

  网上存在很多的Cookie操作的文章,可是这些东西都是抄来抄去的,哪个站长跟本就没有对这些代码做过测试,我以前试着看过好多个,很多是存在有问题的。
希望这篇文章会给需要的人带来帮助。

转载于:https://www.cnblogs.com/tiger8000/archive/2007/11/15/960538.html

谈谈 Cookie 存取和IE页面缓存的问题相关推荐

  1. 前端cookie、localStorage、sessionStorage缓存技术总结

    前端cookie.localStorage.sessionStorage缓存技术总结 转载自:https://www.cnblogs.com/belove8013/p/8134067.html 1.C ...

  2. Varnish页面缓存服务

    一.缓存相关概念简述 时间局部性:一个数据被访问过之后,可能很快会被再次访问到: 空间局部性:一个数据被访问时,其周边的数据也有可能被访问到 数据缓存:例如MySQL到web应用服务器之间的缓存服务器 ...

  3. 用window.open在同一个新窗口中访问指定url【IE页面缓存问题】

    无数次尝试,拼命搜索查资料,就这么个问题花去整整5小时,残念... 好歹现在解决了. 情况如下: 想实现类似于newegg,icson等网上商城的购物车模式,即在选购商品的页面A中,点击某些链接,把商 ...

  4. 为什么要使用页面缓存技术

    为什么要使用页面缓存技术 一.总结 一句话总结: 系统的瓶颈往往是来自于数据库,我们可以使用缓存来减少对数据库的访问! 系统都是逐渐演进的,一个系统在运行中必须是根据场景逐渐地提高优化性能.高并发就是 ...

  5. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  6. Nginx 反向代理、负载均衡、页面缓存、URL重写、读写分离及简单双机热备详解...

    大纲 一.前言 二.环境准备 三.安装与配置Nginx  (windows下nginx安装.配置与使用) 四.Nginx之反向代理 五.Nginx之负载均衡  (负载均衡算法:nginx负载算法 up ...

  7. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    标签:读写分离 页面缓存 URL重写 Nginx 反向代理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.bl ...

  8. 请你谈谈COOKIE的弊端

    请你谈谈COOKIE的弊端 a. 每个特定的域名下最多生成的cookie个数有限制 b. IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie c. cookie的 ...

  9. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解【转载】

    本文只为备份,以防失效.原文请看https://blog.51cto.com/freeloda/1288553 补充说明:部分图片为测试图片,未完全复制,参考文字描述即可. Nginx 反向代理.负载 ...

最新文章

  1. Java中的自动装箱和拆箱
  2. 搜索和其他机器学习问题有什么不同?
  3. 【转】每天一个linux命令(38):cal 命令
  4. 第四篇:mysql管理工具
  5. Iterator迭代器
  6. PHP前端和数据库的连接
  7. feign一个接口多个方法_spring cloud 建一个服务消费者client-feign(最好用这种方式)...
  8. 创建 Robotium 测试工程
  9. Docker中数据管理
  10. 机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类
  11. python后端框架flask_Vue+Flask轻量级前端、后端框架,如何完美同步开发
  12. 名校教授:把研究生扔到河里,游过去的就成为博士
  13. 垃圾回收算法与实现系列-Java堆内存溢出原因
  14. 当连接一个 IP 不存在的主机时,TCP握手过程是怎样的?
  15. 电脑端用起来特别爽的四款软件,哪一款才是你的最爱?
  16. PyTorch学习笔记(三):PyTorch主要组成模块
  17. HTRAN 2.4终极使用
  18. 个类似GoogleMap的客户端JS开源库
  19. dss中文含义_DSS(中文译名:决策支持系统),这是什么系统?有多少个种类?...
  20. spss 描述性分析

热门文章

  1. 深度学习每层的通道数如何计算_深度学习基础系列(一)| 一文看懂用kersa构建模型的各层含义(掌握输出尺寸和可训练参数数量的计算方法)...
  2. php jira,php – 为Jira的api添加附件
  3. 天翼云从业认证(4.12) 天翼云医疗行业解决方案
  4. 【项目管理】ITTO-范围管理
  5. Eclipse的Git插件下载项目出现 No project found
  6. 笔记-信息化与系统集成技术-智慧城市建设参考模型
  7. MP4 info查看moov头位置
  8. delphi 运行外部程序函数winexec WinExecAndWait32 CreateProcess
  9. 信息系统项目管理师-项目合同管理考点笔记
  10. C#中实现文件重命名的方式