什么时候从用户发送cookie?

时间:2011-09-26 19:51:23

标签: php cookies ssl

我有一个有函数的类,比如class.php:

class fun {
public function get_cookie() {
$old_cookie = $_COOKIE['mycookie'];
}
public function ssl() {
//redirect from http to https
}

在另一个php文件中,让我们说index.php:

//include fun class
$fun = new fun;
$fun->ssl();
$fun->get_cookie();

我的问题是,因为函数get_cookie是在$ fun-> ssl()之后,用户是否发送加密的cookie?或者由于cookie代码是在$ fun-> ssl()执行之前编码的,所以cookie是以未加密的方式发送的?

3 个答案:

答案 0 :(得分:3)

切勿通过需要加密的Cookie发送任何内容。

无论对此处提出的实际问题的答案如何,您的cookie内容应被视为公开可访问且不安全。

首先,每个网络请求都会发送(两个方向)网站的整套Cookie。因此,即使您在此特定请求中使用SSL成功加密它们,用户也只需要为您网站上的图像发出纯HTTP请求,然后他就会传输它们并将其发送回未加密状态。

其次,在网站之间泄露Cookie并不是闻所未闻。存在许多跨站点脚本黑客攻击,可以让第三方获取用户的cookie。这些不会以加密方式存储在用户的计算机上,即使它们是通过SSL发送的。

所以我将再次重复我的初步陈述:永远不要通过cookie发送任何你需要保密的东西。

答案 1 :(得分:1)

Wikipedia article对Cookie的工作方式有很好的解释。基本上,cookie与请求标头一起发送。因此,除非通过HTTPS建立连接,否则cookie将以明文形式发送。

答案 2 :(得分:1)

在代码运行之前发送cookie。 PHP读取标题,填充全局变量$ _COOKIE []然后执行您的代码。因此,如果某人使用HTTP发出请求,他将获得未加密的cookie。

创建cookie时,您可以定义cookie仅发送到使用HTTPS请求的页面。您可以使用带有session_set_cookie_params()参数的函数setcookie()$secure执行此操作。如果使用HTTP请求页面,则不会发送此类cookie。