2011-05-15 52 views
3

我对PHP很陌生,正在尝试使用Cookie和会话。当Cookies被禁用时,会话数据不显示

因此,在IE中,如果我将我的隐私设置设置为阻止所有Cookie,显然所有的Cookie都会被阻止,但是会话呢?

我问,因为我的印象是,如果cookie被阻止但我开始一个会话,该会话应该是有效的。换句话说,无论我为会话变量设置什么,只要浏览器处于打开状态,就应该使用浏览器,但这似乎没有发生。

我的整个思维过程背后是我可以使用cookie作为我的第一种跟踪方式,除了设置cookie之外,我还可以设置会话以防止cookie被禁用。

所以问题1 - 为什么我的会话变量被阻止?这是否会发生? 问题2 - 设置cookie和会话(如果cookie被阻止)是否是好习惯?

回答

2

会话绝大部分只是一个链接到数据集的标识符,每个用户。

该标识符几乎总是以cookie的形式存储。如果Cookie被禁用,会话cookie也是如此,会话也是如此。方法是在每个URL中包含会话ID,然后挑出它并使用它来初始化会话(即使用ID来查找存储的会话数据)。

PHP 可以自动将会话ID添加到相对URI,它取决于配置选项。请参阅手册中的“Passing the Session ID”。 (特别注意this comment。)

+0

非常感谢!这非常有帮助。 – Charlie 2011-05-16 00:18:35

1
  1. 会话未被阻止。但会话ID是每个请求更改。所以很显然你没有看到你的数据
  2. 它们被用于不同的事情。所以不能说这是好还是坏
2

尽管会话存储在服务器端,服务器仍然需要跟踪请求来自哪里。为了做到这一点,会话会在计算机上的Cookie中存储唯一的ID。这样做和简单设置cookie的区别在于后者包含信息本身,而会话cookie仅用于识别您的请求。因此,禁用cookie将防止这种情况发生,因此您的会话变量可能不会被保留。

您可以使用无Cookie会话,通常只需将您的唯一ID附加到您发送的每个URL请求(这样您的URL就会有一堆看似随机的字母数字字符)。我不确定PHP是否支持这种方法。

只要信息不太敏感,或者希望他们长时间呆在用户计算机上,就应该使用Cookie。会话更安全,即使Cookie可以加密,因为数据存储在服务器端。决定使用哪一个取决于你的要求,因为每个人都有自己的优点和缺点。

+1

我记得几年前在PHP上使用无Cookie会话,并且遇到了Google使用会话查询字符串索引URL的问题 - 这意味着使用该链接的所有流量都将共享相同的会话数据。恶梦!搜索引擎可能足够聪明,但现在不这样做,但它仍然担心:) – 2011-05-16 00:17:49

+0

我也喜欢使用cookie的会话。我认为这是默认设置,并且您并不经常使用无Cookie会话。但是,如果你有*,以满足那些关闭cookies的用户,那里有选择。 – keyboardP 2011-05-16 00:19:48

+0

@James McCormack:为了避免这样的事情,有时候检测蜘蛛并以不同的方式对待它们是一个想法。虽然很棘手。 – Orbling 2011-05-16 10:01:10