Cookie存取和IE页面缓存的问题

最近老是发现在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()%>
<href="<%=UrlRewriteLink.GetUserHomeUrl()%>">您的主页</a> | 
<href='/user/user_setup.aspx'>个人设置</a> | 
<href='/logout.aspx'>退出</a>
<%}else{%>
<span style="margin-right:10px;">您已经登录了!</span><href="/reg.aspx">注册</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操作的文章,可是这些东西都是抄来抄去的,哪个站长跟本就没有对这些代码做过测试,我以前试着看过好多个,很多是存在有问题的。
希望这篇文章会给需要的人带来帮助。


转载:http://www.cnblogs.com/huacn/archive/2007/11/14/958891.html#959695

转载于:https://www.cnblogs.com/yongqiudeng/archive/2007/11/15/960215.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组(一维、二维)

1&#xff0c; 动态初始化&#xff1a; int [] arr new int [5] 如果直接输出arr&#xff1b; System.out.print&#xff08;arr&#xff09;&#xff1b; 结果为&#xff1a; [I13b64eb [&#xff1a;表示一维数组&#xff0c;几个就代表几维数组&#xff1b; I&#xff1a;表…

Extjs TextField扩展

Extjs.form.TextField的默认在输入框后面是不能加入文字。在网上找到此方法以备查用。 /** * 重写textfield,为其多加一个属性sideText,在文本框后面加html * author rms * create 2011-08-17*/Ext.override(Ext.form.TextField, { sideText : , onRender : functi…

远控免杀专题10--TheFatRat免杀

0x01 免杀能力一览表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全…

c++语句switch语句_错误:案例标签不在C中的switch语句内

c语句switch语句The error: case label not within a switch statement occurs in C language with switch case statement, when switch (variable/value) statement is terminated by the semicolon (;). 错误&#xff1a;当switch(变量/值)语句由分号( ; )终止时&#xff0c…

远控免杀专题11-Avoidz免杀

0x01 免杀能力一查表 几点说明&#xff1a; 1、上表中标识 √ 说明相应杀毒软件未检测出病毒&#xff0c;也就是代表了Bypass。 2、为了更好的对比效果&#xff0c;大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全…

使用方法实现数组的对调与输出

package asdasqq; import java.util.*; public class asdasdad { public static void main(String[] args) { Scanner wsqnew Scanner(System.in); int qwsq.nextInt();//输入q&#xff0c;表示数组arr的大小&#xff1b; int [] arrnew int [q];//定义一个整型数组arr&a…

CAP与流密码

CAP 中流密码的操作 1 、Cipher 下拉菜单中选中Stream 2&#xff0c;设置LFSR 参数&#xff0c;设置好参数后点击Set Key LFSR Size&#xff1a;表示有几个寄存器 Initial key:寄存器的初始状态&#xff0c;每个寄存器初始值是0或1&#xff0c;放在一起转化成十六进制 Feedbac…

高性能Javascript 用局部变量缓存集合元素

document.images; 由于集合元素是处于实时状态的实时存在,它与底层dom连接着。在遍历它的每一个属性或length时都会带来查找&#xff0c;从而性能开销很高。 这里是有关集合元素在循环处理时的优化原则 一、用变量缓存集合元素 二、在循环在缓存集合length属性 三、在循环中用变…

QTP中使用描述性编程

我们简单介绍一下有关功能测试的基本方法&#xff0c;这实际上对于所有自动化功能测试产品来说都是一样的。一般情况下&#xff0c;用QTP来进行功能测试的基本方法主要包括三个主要阶段&#xff1a; 1、创建测试或组建 首先可以通过在应用程序或网站上录制会话&#xff0c;或…

字符数组的查找法

package asdasqq; import java.util.*; public class suoying { public static void main(String[] args) { Scanner wsqnew Scanner(System.in); System.out.print(“请输入对应的星期范围在一~日&#xff1a;”); int week wsq.nextInt(); System.out.print(getWeek(…

结构和其他数据形式

0x01 结构声明 结构声明&#xff08;structure declaration&#xff09;描述了一个结构的组织布局。 struct book{char title[MAXTITL];char author[MAXAUTL];float value; };该声明描述了一个由两个字符数组和一个float类型变量组成的结构。该声明并未创建实际的数据对象&am…

Java StringBuffer char charAt(int index)方法与示例

StringBuffer类char charAt(int index) (StringBuffer Class char charAt(int index)) This method is available in package java.lang.StringBuffer.charAt(int index). 软件包java.lang.StringBuffer.charAt(int index)中提供了此方法。 This method is used to return the …

Form验证

代码写 N 久了&#xff0c;总想写得别的。这不&#xff0c;上头说在整合两个项目&#xff0c;做成单一登录&#xff08;Single Sign On&#xff09;&#xff0c;也有人称之为“单点登录”。查阅相关文档后&#xff0c;终于实现了&#xff0c;现在把它拿出来与大家一起分享。或许…

添加LinkServer的两句代码

sp_addlinkedserver linkserver,,SQLOLEDB,linkserver.comsp_addlinkedsrvlogin linkserver,false,null,sa,asdf第一句是添加一个名字为linkserver的链接服务器 地址是linkserver.com第二句是针对第一句添加的Linkserver添加一个访问帐号两句不能同时执行 要第一句执行成功后执…

数组的基本查找

package asdasqq; import java.util.*; public class jibenchazhao { public static void main(String[] args) { int [] arr{11,22,33,44,55,66,77}; Scanner wsqnew Scanner(System.in); int qwsq.nextInt();//输入q&#xff0c;即为查找的数&#xff1b; int index g…

Cobaltstrike4.0系列教程(一)----简介与安装

0x01-Cobaltstrike简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器&#xff0c;常被业界人称为CS。这款神器许多大佬们都已经玩的很6&#xff0c;我一个菜鸡玩的略有心得&#xff0c;因此写一下自己的Cobaltstrike系列文章&#xff0c;希望给各位一点帮助。 最近这个…

c ++类成员函数_仅使用C ++创建具有公共数据成员的类

c 类成员函数Let’s understand 让我们来了解 What is data member? 什么是数据成员&#xff1f; Any variable declared inside the class in known as data member of the class. 在类内部声明的任何变量&#xff0c;称为类的“数据成员”。 What is public data member…

转:php.ini中文版

[PHP] ; PHP还是一个不断发展的工具&#xff0c;其功能还在不断地删减 ; 而php.ini的设置更改可以反映出相当的变化&#xff0c; ; 在使用新的PHP版本前&#xff0c;研究一下php.ini会有好处的 ;;;;;;;;;;;;;;;;;;; ; 关于这个文件 ; ;;;;;;;;;;;;;;;;;;; ; 这个文件控制了PHP许…

qt 试用 (3)配置编译源代码及调试

qt 试用 &#xff08;3&#xff09;配置编译源代码及调试qt creater是一个集成ide&#xff0c;像vc一样容易使用&#xff0c;所以首先下载带qt creater的qt sdk Offline installer - 1.4 GB http://qt.nokia.com/downloads/sdk-windows-cpp-offline这里的lib没有pdb和源代码…

两数的最大公约数算法基础及优化

最大公约数算法师从辗转相除法&#xff08;欧几里得算法&#xff09;时间复杂度更相减损术&#xff08;《九章算术》&#xff09;时间复杂度二分化更相减损术思路优化时间复杂度师从 本篇是观Vita君算法视频后总结&#xff0c;他是bilibili一位小up主&#xff1a;小学生Vita君…