• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

100分问一个突然出现的Cookie问题,关于添加/删除Cookie的。

屡败屡战数马援 2004-07-14 11:29:19
事情原由是我再写一个Web上的权限管理系统,已经基本完工。系统检测客户端是否已经登录是利用客户端的加密Cookie的内容。

登录是在登录页系统检查用户输入帐户信息以后,把加密的验证内容写入客户端Cookie,然后用Response.Redirect()方法执行重定向到需要登录才能看的页面。

注销是当用户按注销按钮或者Cookie过期后,系统自动把客户端Cookie删除,并且重定向。

大家可以看出来,Cookie内容并不重要,实际上就是Cookie的添加和删除操作。但是问题就是出来了。

首先是登录页,出现的问题是当我输入登录信息,然后单击登录按钮,正常操作应该是联系数据库检查用户登录信息,成功后写入Cookie,然后重定向,我写的代码没有错。但就是不这样操作,页面仅仅是刷新了一次,也不写Cookie,也不执行重定向。

注销也是这个问题,注销按钮连接到一个方法上,用途是把Cookie删除,然后重定向,但是执行以后,我发现Cookie没有被删除掉,也不执行重定向。客户端的Cookie根本没有被删掉。但是也没有任何提示信息。

代码如下

首先是登录

// 执行数据库验证代码略,假设成功
// 加入Cookie的内容略,假设是string str
HttpCookie cookie = new HttpCookie("MyCookie",str);
cookie.Expires = DateTime.Now.AddMinutes(20); // 有效时间20分
Response.Cookies.Add(cookie);
Response.Redirect("..."); // 重定向


然后是删除
Response.Cookies.Remove("MyCookie");
Response.Redirect("....") // 转向

无论是添加Cookie还是移除,都不执行。请问解决方案。
...全文
337 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
活靶子哥哥 2004-07-14
删除 Cookie
删除 Cookie(即把该 Cookie 从用户的硬盘上物理删除)是修改 Cookie 的一种形式。由于 Cookie 位于用户的计算机中,所以您无法直接将其删除。但是,您可以让浏览器为您删除 Cookie。修改 Cookie 的方法前面已经介绍过(即用相同的名称创建一个新的 Cookie),不同的是将其有效期设置为过去的某个日期。当浏览器检查 Cookie 的有效期时,就会删除这个已过期的 Cookie。

所以,删除 Cookie 的方法与创建该 Cookie 的方法是相同的,只不过要把其有效期设置为过去的某个日期。以下示例比删除单个 Cookie 要稍微有趣一些,它使用的方法可以删除当前域的所有 Cookie:

Dim i As Integer
Dim cookieName As String
Dim limit As Integer = Request.Cookies.Count - 1
For i = 0 To limit
aCookie = Request.Cookies(i)
aCookie.Expires = DateTime.Now.AddDays(-1)
Response.Cookies.Add(aCookie)
Next

这里有详细说明

http://www.microsoft.com/china/MSDN/library/archives/library/dv_vstechart/html/vbtchaspnetcookies101.asp#vbtchaspnetcookies101anchor7
回复
webdiyer 2004-07-14
我是在客户端实现跳转的,即登录成功后用Response.Write()将跳转的脚本发送到客户端,因为我要在跳转前执行其它操作(比如关闭登录窗口,在新窗口中打开要跳转的页),没有用到Response.Redirect这种方法来跳转,我的猜测是:用Response.Redirect()跳转时,当前页的执行已被终止并立即跳转到了另一页,也就是当前页没有被发送到客户端,Cookie也就无法被发送到客户端。
至于删除Cookie,我是这样做的:

HttpCookie cookie=Request.Cookies["mycookie"];
cookie.Expires=DateTime.Today.AddDays(-10);
Response.Cookies.Add(cookie);//这句千万别丢了,因为Cookie是保存在客户端的,如果没有被发送到客户端,在服务器端设置它的Expires属性是没有任何用处的
回复
Jinniu 2004-07-14
处理方式你需要自己查一下了,然后这样调用即可!
Response.Write("<script languge='javascript'> 处理cookie部分;window.location.href='跳转页面';</script>");

Response.Cookies.Remove("MyCookie");
Response.Redirect("....") // 转向
同理!
回复
IamBM 2004-07-14
mark
回复
goody9807 2004-07-14
<script language="javascript">
function GetCookie (name)
{
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen)
{
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}

function getCookieVal (offset)
{
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function SetCookie (name, value)
{
document.cookie = name + "=" + escape (value)
}
</script>

给你个JS写的
回复
Jinniu 2004-07-14
Response.Cookies.Add(cookie);
Response.Redirect("..."); // 重定向
需要页面进行刷新时才执行第一句,但是重定向后页面无法进行刷新,所以没有执行关于cookie的操作.你只有全部用js来处理关于cookie的部分.
回复
活靶子哥哥 2004-07-14
删除,只要把cookies过期事件设定为过去某个时间就可以了
回复
goody9807 2004-07-14
好像 Response
Response.Cookies.Add(cookie); 这句 一遇到Response.Redirect("....")

就不起作用了 换个写法用Response.write("window.open..") 式式
回复
saucer 2004-07-14
>>>页面仅仅是刷新了一次

if you debug, does the code get executed at all? by the way, are you doing any validation?

>>>然后是删除

>>>Response.Cookies.Remove("MyCookie");
>>>Response.Redirect("....") // 转向

you probably should set the cookie's Expires property to a time in the past

回复
Diadem 2004-07-14
cookie=new HttpCookie("www.xx.org");
cookie.Values.Add("UserType", ddlLoginType.SelectedItem.Value);
cookie.Values.Add("UserName", tbUserName.Text.Trim());
cookie.Values.Add("Password", tbPassword.Text.Trim());
cookie.Values.Add("Access",i.ToString());
Response.AppendCookie(cookie);
//检查COOKIE是否已经写入浏览器
cookie = Request.Cookies["www.xx.org"];
if(cookie==null||cookie.ToString()=="")
{
//用session存储
LoginUser loginUser = new LoginUser();
loginUser.UserName = tbUserName.Text.Trim();
loginUser.Password = tbPassword.Text.Trim();
loginUser.UserType = ddlLoginType.SelectedItem.Value;
loginUser.Access = i;
Session["www.xx.org"] = loginUser;
}

我以前的代码,没有问题的
回复
saucer 2004-07-14
>>>页面仅仅是刷新了一次

if you debug, does the code get executed at all? by the way, are you doing any validation?

>>>然后是删除

>>>Response.Cookies.Remove("MyCookie");
>>>Response.Redirect("....") // 转向

you probably should set the cookie's Expires property to a time in the past

回复
Diadem 2004-07-14
HttpCookie cookie = Request.Cookies[strKey];
if(null == cookie)
{
//cookie不存在
}
先看看有没有写入客户端
回复
cpp2017 2004-07-14
跟踪一下代码,这几句有没有执行?
回复
aierong 2004-07-14
http://www.cnblogs.com/aierong/archive/2004/07/14/23950.aspx
http://www.cnblogs.com/aierong/archive/2004/07/14/24196.aspx
注意:在获取Cookie的值之前,应该确保该 Cookie 确实存在。否则,您将得到一个异常
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2004-07-14 11:29
社区公告
暂无公告