禁用Cookie时会话数据不显示

时间:2011-05-15 23:43:06

标签: php session

我是PHP的新手,正在尝试使用Cookie和会话。

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

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

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

问题1 - 为什么我的会话变量被阻止?那假设发生了吗? 问题2 - 设置cookie和会话(如果cookie被阻止)是一种好习惯吗?

3 个答案:

答案 0 :(得分:2)

会话大多数情况下,只是每个用户链接到数据集的标识符。

此标识符几乎总是存储为cookie。如果禁用cookie,会话cookie也是如此,会话也是如此。解决这个问题的方法是在每个URL中包含会话ID,然后选择它并使用它来初始化会话(即使用ID来查找存储的会话数据)。

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

答案 1 :(得分:2)

虽然会话存储在服务器端,但服务器仍需要跟踪请求的来源。为此,会话将唯一ID存储在计算机上的cookie中。这样做和简单设置cookie之间的区别在于后者包含信息本身,而会话cookie仅用于识别您的请求。因此,禁用cookie可以防止这种情况发生,因此可能无法维护会话变量。

您可以拥有无​​Cookie会话,这通常只会将您的唯一ID附加到您发送的每个网址请求中(因此您的网址会有一堆看似随机的字母数字字符)。我不确定PHP是否支持这种方法。

如果信息不太敏感,或者您希望Cookie长时间留在用户的计算机上,则应使用Cookie。即使cookie可以加密,因为数据存储在服务器端,因此会话更安全。决定使用哪一个取决于您的要求,因为每个都有其优点和缺点。

答案 2 :(得分:1)

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