C# cookies 丢失

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# cookies 丢失相关的知识,希望对你有一定的参考价值。

我的程序cookies很容易就丢失,不知道是程序的问题还是服务器的问题,当人少的时候不容易丢失,但是当人多的时候就容易,是不是和服务器的设置有关?求解啊
我明明写了时间,cookie.Expires = DateTime.Now.AddDays(1);然后浏览器隐私也是最低安全的设置,但是还操作到一半跳出来,怎么回事啊

参考技术A cookies 丢失一般分两种情况
1.浏览器的问题:浏览器有安全设置,会自动清除cookie
2.代码问题:cookie的参数没设置,特别是过期时间,如果你设置一天,那一天之后就自动清除此cookie
参考技术B 你的Cookie是存在客户端的,不是服务器端存在的。这个要搞清楚了。
基次,你的这个Cookie有没有指定域(domain),有没有设置path可使用路径。
根据这些先检查一下你的程序。追问

能不能说的清楚点大侠

追答

我觉得我已经说清楚了呀。
不知道你哪里不明白呢?

追问

什么叫指定域(domain),什么叫设置path可使用路径

追答

HttpCookie cookie = new HttpCookie("UserName");
cookie.Domain="163.com";
那么在163域名下面的所有子域都可以调用这个UserName的cookie.
Path如果在是JS里面操作Cookie的话,Path你直接设置成根目录就可以了。
path="/";

追问

和我丢失cookies有什么关联?

追答

cookie怎么会丢失呢?你没有设置过期时间吗?没有设置cookie过期时间的话,cookie的生命周期是浏览器关闭就失效。

本回答被提问者和网友采纳
参考技术C 修改以下配置文件吧,设置以下cookies 的过期时间追问

cookies 我设置了一天了,有时候很正常可以使用一天,但是有时候一下就丢失,怎么回事

追答

检查以下程序吧可能在其他地方修改了它的值.

浏览器:刷新时 Cookie 丢失

【中文标题】浏览器:刷新时 Cookie 丢失【英文标题】:Browser: Cookie lost on refresh 【发布时间】:2011-02-01 21:21:04 【问题描述】:

我在 Chrome 浏览器中遇到了我的应用程序的奇怪行为(其他浏览器没有问题)。当我刷新页面时,cookie 被正确发送,但间歇性地,浏览器似乎没有在某些刷新时传递 cookie。

这就是我设置 cookie 的方式:

$identifier = / some weird string /;
$key = md5(uniqid(rand(), true));
$timeout = number_format(time(), 0, '.', '') + 43200;
setcookie('fboxauth', $identifier . ":" . $key, $timeout, "/", "fbox.mysite.com", 0);

这是我用于页眉的:

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Thu, 25 Nov 1982 08:24:00 GMT"); // Date in the past

您是否发现这里有任何可能影响 cookie 处理的问题?感谢您的任何建议。

EDIT-01:

似乎某些请求没有发送 cookie。这会间歇性地发生,我现在看到 ALL 浏览器的这种行为。有没有人遇到过这种情况?是否存在cookie不会随请求一起发送的情况?

EDIT-02:

这里是 HTTP 标头:

Request Method:GET
Status Code:200 OK

请求标头

Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Referer:http://fbox.mysite.com/dashboard
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)
AppleWebKit/532.5 (KHTML, like Gecko)
Chrome/4.1.249.1045 Safari/532.5

响应标题

Cache-Control:no-cache, must-revalidate
Content-Length:8903
Content-Type:text/html
Date:Tue, 06 Apr 2010 09:25:26 GMT
Expires:Thu, 25 Nov 1982 08:24:00 GMT
Last-Modified:Tue, 06 Apr 2010 09:25:26 GMT
Pragma:no-cache
Server:Microsoft-IIS/7.5
X-Powered-By:PHP/5.3.1 ZendServer

再次感谢任何指导。

【问题讨论】:

查看您的服务器发送的确切 HTTP 标头会非常有帮助,并且知道您在哪个服务器/版本/php 版本上运行它?您能否将这些详细信息以及此命令的结果添加到问题中(前提是您在本地运行 linux 变体): curl -I [url_to_your_app] 你刚刚试过$timeout = time() + 43200; 吗? @Jason:是的,我做到了,但还是一样。 尝试删除 setcookie 的路径和域,看看是否是导致问题的原因。还可以尝试启用 display_errors 并将 error_reporting 设置为 E_ALL 以查看是否有任何不太明显的错误。 @James:我已经添加了 HTTP 信息。请看一看。顺便说一句,该站点位于装有 PHP 5.3.1 的 Windows 机器上。 【参考方案1】:

看到您的标头信息后,我唯一能想到的是 PHP 在您设置 cookie 之前正在输出一些东西。如果是这种情况,setcookie 应该返回 false 并且您将收到警告“无法发送会话 Cookie - 标头已发送” 正如 Bart S. 建议的那样,打开 error_reporting(E_ALL) 并尝试输出 setcookie 的返回值以验证这是不是这样的。

另外,尝试在基本情况下仅使用 setcookie 并仅使用名称和值,然后再次检查响应标头。然后删除除 setcookie 之外的所有代码,如果可行,请使用分而治之的方法将所有代码带回 :)

【讨论】:

哈!我想到了。数据库事务处理程序类在页面之间运行,并在极少数情况下在加载下一页之前引发异常。但是,奇怪的是,即使在处理程序打印出错误之后,标头重定向也能无缝工作。现在我已经修复了我的 db 类,一切看起来都很好。感谢您的提示,这在正确的时刻有所帮助! :)【参考方案2】:

您的应用程序是通过 http 协议还是 file:// 提供服务?

Chrome 不会在本地应用中存储 cookie,这是设计使然。您可以使用命令行开关更改此行为:

--启用文件-cookies

【讨论】:

通过http协议提供服务。我已经完成了所有检查,但仍然无法追踪问题。甚至尝试重新创建整个 cookie 逻辑,但仍然失去持久性。但你的信息很有用。关于 Chrome 的文件 cookie 行为。谢谢你。【参考方案3】:

我以前见过类似的问题。我会仔细检查路径是否正确。

我想 www.domain.comdomain.com 不同,www.domain.com/ 也是如此(带有尾部正斜杠)

除此之外,检查 PHP 是否有权将其会话写入具有适当写入权限的文件(取决于发行版,它是不同的目录,但 phpinfo() 应该告诉您它正在尝试使用哪个目录。)

我以前遇到过这两种情况。第一个没有错误,似乎模仿了您所遇到的情况,第二个给出了某种文件写入访问错误,但如果没有显示错误,您可能看不到。

【讨论】:

感谢您的一些想法。该站点位于 Intranet 中,不会超出其子域。这意味着其中没有 www 或更改子域。对于会话,我重写了 PHP 的会话处理以使用数据库,它可以正常工作。 他似乎没有使用会话,所以这几乎不会影响他的示例。【参考方案4】:

一个问题,一个建议 -

问题 - 你为什么要在 time() 上执行 number_format(...),因为 time() + 43200 应该就足够了。

建议 - 您是否查看过客户端和服务器之间的时钟。由于您只在两者之间给出了 12 小时的差异,因此如果在两台机器之间的 GMT 时间存在较大的时钟偏差或存在分歧,您可能会发现您发送的 cookie 注定要在不久的将来。

【讨论】:

感谢您的回复。该站点位于 Intranet 中,并且所有机器都在同一个办公室中。此外,所有客户端计算机都配置为从时间服务器自动更新时间。所以我可以说,这不是时间问题。【参考方案5】:

您处理 cookie 的方式完全没问题,您的代码似乎一切正常,问题似乎出在 Chrome 上。

虽然 Chrome Issue# 3014 主要处理 Java 小程序,但您似乎正在经历这种情况。

【讨论】:

@Anthony:谢谢你的参考。我尝试了很多搜索,但找不到任何与我的问题相关的 Chrome 问题。我想知道其他网站如何处理他们的 cookie。它们在 Chrome 上仍然运行流畅。 @Nirmal,参考没问题。搜索有点困难,这是我唯一找到的东西。我看到他们的公开赏金,我希望有人能解决你的问题,祝你好运。

以上是关于C# cookies 丢失的主要内容,如果未能解决你的问题,请参考以下文章

C# 清楚Cookies

C#中Request.Cookies 和 Response.Cookies 的区别分析

如何使用c#向chrome cookies文件插入新记录

用C#和js实现xmlHttp发送cookies

如何实现网页代码清除所有cookies

C#用HttpClient类post get,怎么设置cookies