2012-02-03 90 views
0

我猜不是,但是有没有办法在PHP中设置cookie,而不必在输出开始时输入ob_start()输出后设置cookie,没有ob_start

我的问题是,我正在开发一个类,其中包括需要设置一个cookie。现在我不能告诉使用它的人“在你做出任何输出之前你必须创建一个新的类的实例”,因为这会是蹩脚的。那么我能以某种方式将它拉下来吗?

+0

为什么它在输出之前设置cookie? – Josh 2012-02-03 15:51:45

+0

如果是你的代码,那么这样做并不是跛足的,只是迫使另一个开发者这样做是因为他想使用你的类。 – 2012-02-03 16:06:38

+2

如果您记录类负责发送HTTP头(如Set-Cookie),那么说在发送任何输出之前需要使用它是没有错的。例如,'setcookie'文档就是这样说的。 – 2012-02-03 16:51:30

回答

2

Headers already sent by PHP

非专业的解决方法那里列出适用。具体做法是:

<META HTTP-EQUIV="Set-Cookie" 
CONTENT="cookievalue=xy;expires=Friday, 14-Dec-12 12:12:12 GMT; path=/"> 

或者使用并设置document.cookie

2

你不能。 Cookies是作为标题的一部分发送的,所以如果你已经发送了正文,那就太迟了。输出缓冲是解决方案。

也许你可以使用会话变量。

+0

我可能会这样做,只有在无法设置cookie的情况下,谢谢,这也是一个很好的建议:) – 2012-02-04 19:29:48

1

这是我的workround,对我来说工作得很好。

// Force set cookie now 
$_COOKIE['ref_url'] = $_SERVER['HTTP_REFERER']; 

// Set cookie after refresh site 
setcookie('ref_url', $_SERVER['HTTP_REFERER'], Affiliate::$cookieTime); 

// Diplay $_COOKIE 
var_dump($_COOKIE['ref_url']); 
+0

$ _SERVER ['HTTP_REFERER']有时是空的,所以在使用它之前先进行测试。 $ url_referrer = empty($ _ SERVER ['HTTP_REFERER'])?'':$ _ SERVER ['HTTP_REFERER']; – fedmich 2012-09-22 02:04:43