非常奇怪的问题,请大家帮下忙,asp.net页面回发时找不到Cookie,

cs_esharp 2012-04-25 10:07:12
遇到一个奇怪的问题,做的asp.net多标签程序,打开页面时,Cookie正常,页面回发时,Cookie丢失了
同样的代码在另外两台电脑上没此现象
注:我Cookie的key用的是Guid
有谁知道是怎么回事吗
具体现象描述如下:
1、程序启动后,进入程序操作,引起页面回发,一切正常,Cookie也正常没丢;
2、注消退出程序,在程序登录界面上选择另一个数据库登录操作,初次加载页面Cookie正常,引起页面回发Cookie丢失,但关闭此子页面,重新打开正常,再次页面回发还是丢失,

也就是说只要不注消退出,怎么弄都行没问题,只要注消退出后,再选另一个数据库进入就有问题,非要完全关闭浏览器再进就没问题

这个现象在我电脑上出现,另两台电脑上无此现象,非常怪异,我重装系统这个现象还是存在,以前在我电脑上没有这个现象的
...全文
214 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cs_esharp 2012-04-27
  • 打赏
  • 举报
回复
guid在用户在线的没退出的时候是不会变的啊,道理很简单,guid在地址栏上,每次页面跳转时,这个guid是一直跟随的,除非用户重新登 录这个guid才会变
anzhiqiang_touzi 2012-04-27
  • 打赏
  • 举报
回复
不要用guid来做key

guid是在变化的,产生出来都是唯一的
孟子E章 2012-04-27
  • 打赏
  • 举报
回复
如果Cookie的Domain,Path都一样,并且Expires足够长,是不会丢失的,你需要检查这些地方,包括web.config配置。
跟是否回发没有关系。
另外,浏览器临时目录要有足够的磁盘空间,一个网站的Cookie总的大小不要超过4k,
httpwatch里面能看到,说明cookie可以是存在,没有丢,除非你看错了,
如果真的没看错,说明你的代码逻辑有问题导致的,cookie只是跟客户端有关,跟服务器端没有关系。

另外,不知道你为啥采用采用这么长guid来作key?

另外,计算机是不会撒谎的,各种错误都是人为导致的

cs_esharp 2012-04-27
  • 打赏
  • 举报
回复
晕死,说半天你们怎么都没明白呢,怎么可能是新key呢,我反复说过了,用户登录时生成一个guid,用这个guid作为key,同时登录成功页面跳转时,这个guid也放在了url中,操作过程中通过获取地址栏中的这个guid的值,然后在cookie中取,页面只要不是回发页面,都取得到,如果是回发页面就取不到,现在你们应该明白我讲的吧,
我怎么可能会用一个没写入到cookie中的key去取cookie呢,请大家看清楚,还有昨天我已经测出来了,如果是用vs的调试方式不管怎么样那guid对应的cookie在页面回发时都不会丢,如果换成了在本机上的iis调试,页面回发时那个cookie在cookie中就看不到了
cs_esharp 2012-04-27
  • 打赏
  • 举报
回复
还有用guid做key还有一个好处就是多用户可以在同一台电脑上登录,而不用非要将之前的登录注消,起到隔离的作用,这样来讲还可以精确统计在线用户数,而不是去用数据库或application中去统计,每个人都有一个唯一的标识,且同一用户登录不同的数据库互不影响
孟子E章 2012-04-26
  • 打赏
  • 举报
回复
看得到那个cookie是不错的,但是你要用它的key才能得到啊,你用新key怎么得到啊
cs_esharp 2012-04-26
  • 打赏
  • 举报
回复
我用httpwatch跟过,在httpwatch里面看得到那个cookie
孟子E章 2012-04-25
  • 打赏
  • 举报
回复
每次用户登录时,就会有一个全新的Guid
那你还怎么得到原先的guid的Cookie啊。你不要产生全新的Guid
cs_esharp 2012-04-25
  • 打赏
  • 举报
回复
直接运行程序,操作没任何问题,我这个项目是用户在登录时可以自动选择自己的独立数据库,Cookie的key用的是guid,也就是说每次用户登录时,就会有一个全新的Guid,我就拿这个全新的Guid作为Cookie的key ,这个现象是最近我重装过一次系统,后才出现的,以前在我的电脑上无此现象不管理IE8还是IE9,且只在我的电脑上有这个现象,其他电脑上没有这个现象
cs_esharp 2012-04-25
  • 打赏
  • 举报
回复
补充说明一下,cookie集合中其他的cookie没丢,就只有那个key为guid的丢了,再页面回发的时候丢了

用户登录的在线的时候这个Key就一直跟随用户,直到用户注销或关闭浏览器终止
孟子E章 2012-04-25
  • 打赏
  • 举报
回复
就会有一个全新的Guid
这样做是不行的啊,key是不能变的
Cookie的key采用固定的名称即可,每个用户都是不同的,
cs_esharp 2012-04-25
  • 打赏
  • 举报
回复

HttpCookie cookie = new HttpCookie(guid.ToString(), this.Server.UrlEncode(vaildate));
Response.Cookies.Add(cookie);


页面取:

string strGuid = Request.QueryString["Guid"];
if (Request.Cookies[strGuid] == null)
{
string script = "<script>alert('【出错提示】非法登录!');parent.href=parent.document.referrer;</script>";
Response.Write(script);
Response.End();
}


直接运行程序,操作没任何问题,我这个项目是用户在登录时可以自动选择自己的独立数据库,Cookie的key用的是guid,也就是说每次用户登录时,就会有一个全新的Guid,我就拿这个全新的Guid作为Cookie的key ,这个现象是最近我重装过一次系统,后才出现的,以前在我的电脑上无此现象不管理IE8还是IE9,且只在我的电脑上有这个现象,其他电脑上没有这个现象
xuan.ye 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

你的Cookie写法可能有问题
参见
http://dotnet.aspx.cc/file/Difference-Response-Cookies-Request-Cookies.aspx
[/Quote]
涨知识了,原来还有这个区别
孟子E章 2012-04-25
  • 打赏
  • 举报
回复
你的Cookie写法可能有问题
参见
http://dotnet.aspx.cc/file/Difference-Response-Cookies-Request-Cookies.aspx
xuan.ye 2012-04-25
  • 打赏
  • 举报
回复
在程序登录界面上选择另一个数据库登录操作,初次加载页面Cookie正常,引起页面回发Cookie丢失,但关闭此子页面,重新打开正常,再次页面回发还是丢失,
-----------------------------------------
选择了另一个数据库,这里面有冲突了,不知掉你具体的业务和程序。

可能你同时双开浏览器,或者选择另外数据造成的,你可以通过登录是清除cookie,或者登录时判断cookie是否存在来避免这个错误。
cs_esharp 2012-04-25
  • 打赏
  • 举报
回复
清过了,还是不行
Im_Sorry 2012-04-25
  • 打赏
  • 举报
回复
清理下浏览器~!!!!
cs_esharp 2012-04-25
  • 打赏
  • 举报
回复
在用户在线时,这个key是不变的,离线重新登录这个才会变
junshanhudazhaxi 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

每次用户登录时,就会有一个全新的Guid
那你还怎么得到原先的guid的Cookie啊。你不要产生全新的Guid啊
[/Quote]
你的cookie是用来标识登录的,cookie的key应该是固定的,而cookie的value是需要根据登录信息动态设置的。

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧