主题:  Cookie的问题,急死了.

Lukiya

职务:普通成员
等级:1
金币:0.0
发贴:59
#12004/11/14 15:30:27
写到用户菜单时,在按钮的函数里设置Response.Cookies.Remove("Music",但是却无法清楚名为Music的Cookie,怎么回事??

代码如下:
// 页面读取函数
private void Page_Load(object sender, System.EventArgs e)
{
HttpCookie ReadCookie = Request.Cookies["Music"];    // 取得Cookie
if (ReadCookie==null)     // 如果Cookie以前没设置
{
HttpCookie Cookie = new HttpCookie("Music";    // 创建Cookie对象
Cookie.values.Add("LogSign","";        // 设置登录标识为空
Response.AppendCookie(Cookie);        // 应用Cookie
ReadCookie = Request.Cookies["Music"];        // 再次读取Cookie
}
}
//设置Cookie函数略
………………
………………
// 退出登录函数
private void LinkBtn_Logout1_Click(object sender, System.EventArgs e)
{
Response.Cookies.Remove("Music";
}
可点击了退出登陆按钮后无法清除以前的Cookie.

然后我又试了这样:

HttpCookie Cookie = new HttpCookie("Music";
Cookie.Expires = DateTime.Now;

但是还是不行,郁闷死了!

谁知道怎么回事?



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#22004/11/14 19:52:25
Page_Load事件在按钮点击送至服务器后,服务器再回传,仍要进行一次Load事件,所以虽然在Click事件中清除了Cookie,但随后的Load仍重新设置该值。

你可以在Load事件中,加上
if (!IsPostBack)
{
//设置Cookie值等
}


非常大鱼

Lukiya

职务:普通成员
等级:1
金币:0.0
发贴:59
#32004/11/14 20:14:19
我去试一试。

开始我也想到了这个问题。

后来,我在清除按钮函数那里加了个断点,然后F11一步一步执行,发现每次执行到
HttpCookie ReadCookie = Request.Cookies["Music"];
if (ReadCookie==null)
时他不进入if语句内部,说明readcookie还是读取到值了,同时也说明清除语句没有清除掉旧Cookie,这是怎么回事?
不管了,我先照你说的加个第一次访问判断试下。



Lukiya

职务:普通成员
等级:1
金币:0.0
发贴:59
#42004/11/14 20:25:19
试后果然不行。

if (ReadCookie==null) 这个判断根本不起作用,说明是没有清除掉以前的Cookie。

老大有没有更好的Cookie操作方法,这个是我自己想的,可能不知道哪里出了点差错。



Lukiya

职务:普通成员
等级:1
金币:0.0
发贴:59
#52004/11/14 20:30:08
我把这句

Page.Response.Cookies.Remove("Music");

加到了page_load第一行,然后逐句调试,亦是不行,if (ReadCookie==null)总是判断为非,也就是说并没有清除,readcookie还是读到东西了。

说明一下,我设置的是一个cookie装多个值,下面是语句。

HttpCookie Cookie = new HttpCookie("Music");    // 创建Cookie对象
Cookie.Expires = DateTime.Now.AddYears(1);        // 1年过期
Cookie.values.Add("LogSign","User");        // 设置登录标识为空
// 设置用户信息进Cookie
Cookie.values.Add("UserID",Member.GetUserID().ToString());
Cookie.values.Add("Username",Member.GetUsername());
Cookie.values.Add("Password",Member.GetPassword());
Cookie.values.Add("Sex",Member.GetSex().ToString());
Cookie.values.Add("QQ",Member.GetQQ());
Cookie.values.Add("Email",Member.GetEmail());
Cookie.values.Add("Rank","0");
Cookie.values.Add("ShowInfo",Member.GetShowInfo().ToString());
Cookie.values.Add("JoinTime",Member.GetJoinTime());
Cookie.values.Add("UpdateTime",Member.GetUpdateTime());
Response.AppendCookie(Cookie);            // 应用Cookie



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#62004/11/14 21:25:44
对新的Cookies集合是没好好去钻过,但用ASP的方法仍然是可以

if (!IsPostBack)
{
    Response.Cookies["Test"].value = "This is a Test";
}

清除用
Response.Cookies["Test"].value = ""

好象我试了用Remove不起作用,Cookies集合比较难用,我以前想在类中调用,但在类中没有实现。
需要一些这方面的指导文章,VS帮助文档好象不是太好。


非常大鱼

Lukiya

职务:普通成员
等级:1
金币:0.0
发贴:59
#72004/11/14 21:41:43
hi
我在想会不会是NTFS格式权限的问题呢?

老大,ASP中可以这样设置
Response.Cookies("Sort1")("UserName") = "XXXXXXXX"

这好像叫二级cookie

在.Net中如果照你说的那种老办法如何实现二级呢?



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#82004/11/14 22:28:38
晚上我做了些练习,终于有些眉目,可以这样

在Load事件中:
if (!IsPostBack)
{
    HttpCookie cookie = new HttpCookie("Test");
    cookie.values.Add("s1", "Hello!");
    Response.Cookies.Add(cookie);
}

在一按钮的清除cookie中:
Response.Cookies["Test"].values.Remove("s1");

另一按钮用于检测
HttpCookie cookie = Request.Cookies["Test"];

if (cookie.values["s1"] != null)
{
    TextBox1.Text = cookie.values["s1"].ToString();
}
else
{
    TextBox1.Text = "NullText";
}


非常大鱼

Lukiya

职务:普通成员
等级:1
金币:0.0
发贴:59
#92004/11/14 23:37:35
照你的说法必须一个键一个键的删?
这就试去!希望成功,期待中。



Lukiya

职务:普通成员
等级:1
金币:0.0
发贴:59
#102004/11/14 23:50:21
哇哈哈哈!!!果然可以果然可以,一个一个删就行了,我怎么没想到

老大果然厉害,在CSDN问了一天都没人知道怎么办,嘿嘿,崇拜崇拜



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#112004/11/14 23:59:12
没什么,我去了MSDN网一趟,还是有些收获。


非常大鱼