会话或饼干?

时间:2010-08-03 18:30:26

标签: php

我正在建立一个主要学习的论坛,但希望有一天会有几个用户。

我想知道你应该使用会话或cookie进行用户身份验证吗?

6 个答案:

答案 0 :(得分:13)

Cookie是服务器通过标头发送的一小段任意数据;客户端将其存储在本地,并在下一个请求时将其发回。即使HTTP本身是无状态协议,该机制也可用于维护从一个请求到下一个请求的状态。 Cookie有两个缺点:它们只提供非常有限的空间(4 kB),并且由于它们是普通的来回发送,恶意客户端可以在将内容发送回服务器之前调整内容,从而有效地使cookie数据不受信任

会话是服务器上的文件,由唯一ID标识,该ID在客户端和服务器之间来回发送,以便服务器可以识别客户端。发送会话ID的最常用方法是通过cookie机制,但也可以通过URL传递会话ID(这就是为什么你经常看到包含URL参数'phpsessid'的链接)。这解决了上面提到的cookie的两个问题:服务器上的文件可以根据需要大小,并且客户端不能通过您自己的脚本访问数据。

通常使用基于cookie的会话来解决身份验证;经过身份验证后,将创建一个新会话,并在其中存储用户ID,并在注销时清除会话并生成新的会话ID。或者,您可以在会话中存储用户名和密码,并在每次请求时检查它们。

答案 1 :(得分:2)

使用会话。

会话由cookie标识,为true,但与在客户端cookie中存储用户身份验证信息不同,这对安全性有害。会话cookie在cookie中存储guid或hash,然后根据该会话识别会话(基于数据库或文件系统,具体取决于服务器的php设置)。

我建议您存储用户表中的主键,而不是任何其他信息,然后每次都查找用户信息 - 这样您就可以在登录时动态更改其验证状态或安全级别;否则他们必须在您的管理更改生效之前注销并重新登录 - IE。你无法启动他们。

此外,不要存储用户名/密码,因为这需要一个效率低于索引主键的查询(即使它们也被编入索引)。

答案 2 :(得分:1)

它们基本相同,携手合作。当您通过PHP创建会话时,会创建一个cookie来存储会话ID。另一方面,如果要实现“记住我”选项以防止用户每次登录,您将创建另一个cookie。

答案 3 :(得分:0)

我不是PHP专家,但Session和Cookie是相关的。在其他编程语言中,您可以选择创建“基于Cookie的会话”或“无Cookie会话”。我不确定PHP,所以也许你指的是不同的概念。

答案 4 :(得分:0)

我觉得使用会话比使用cookie更安全和容易。原因如下:

1)在cookie中我们只能存储一条信息,而在会话中我们可以存储任意数量的信息。

2)存储在用户的硬盘上,可以播放cookie。作为一个对黑客感兴趣的人,我已经做到了并收集了有关用户的有用信息。会话不能用于这样的事情。

答案 5 :(得分:0)

如果是少量数据(只有一个变量),我会使用cookie。这是代码......

   setcookie("cookie name", "cookie value or variable name", time+ 3600, "\");

此代码设置的cookie适用于您的任何网页。它也将在一小时内删除它自己。

您还可以查看cookie是否存在(如果它已经删除了自己)。

    if (isset($_COOKIE['cookiename']))
    {

    }

从cookie中收集值...

    $value = $_COOKIE['cookiename']; //makes a variable for this cookie for your program