2010-08-03 106 views
1

我正在为大部分学习做一个论坛,但是希望有一天它会有几个用户。会话或cookies?

什么即时通讯疑惑是应该使用会话或cookie进行用户身份验证?

+7

会话通过cookie来识别。你有点问:“我应该在这个馅饼中使用苹果还是苹果?”我认为你的真正意思是“我应该将会话数据存储在客户端的Cookie还是我的服务器上?” – 2010-08-03 18:32:56

回答

1

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

0

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

+0

这可能是更好的评论。 – mattbasta 2010-08-03 20:59:21

13

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

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

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

2

使用会话。

会话由cookie标识,为true,但不同于在用户cookie中存储用户认证信息,这对安全性不利。会话cookie在cookie中存储了一个guid或一个散列,然后基于此识别会话(基于数据库或文件系统,取决于您的服务器的php设置)。

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

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

0

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

1)在cookie中,我们只能存储一条信息,而在一个会话中,我们可以存储尽可能多的信息。 2)存储在用户的硬盘上,cookies可以播放。作为一个对黑客感兴趣的人,我已经完成并收集了有关用户的有用信息。会话不能用于这样的事情。

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