实现php登录系统会话或cookie时会有什么好处?
答案 0 :(得分:7)
浏览器Cookie:
PHP会话:
PHP会话在后台创建一个cookie(默认名称为PHPSESSID
,可由session_name()配置),因此您可以使用cookie。会话可以configured 而不是来使用Cookie,但是从cookie支持实际上是一个问题的时候开始,这是一个相当复杂的解决方法。它的作用:重写它可以在输出中找到的所有URL,并将?PHPSESSID=your_session_id
附加到它们。问题:它曾经错过了一些URL,而且URL看起来很难看(恕我直言)。我很久没见过非cookie的PHP会话了(自2002年以来)。
PHP会话与cookie不同,但是在默认配置中,它们使用cookie来存储会话数据的“索引”/“指针”。会话数据存储在PHP服务器上,当您有现有的会话ID时,脚本可以访问相应的数据;而对于纯cookie,您必须将数据保存到cookie本身。 Cookie受大小限制,并在每个页面请求时发送,因此只发送几个字节长的cookie并将数据存储在服务器上是有意义的。
示例:
$_COOKIE: {
'PHPSESSID' => 'a123456ebdf123'
}
$_SESSION: {
'user_name' => 'Piskvor',
8 => 'sadfsadfsdf',
'huge block of text' => '(a huge block of text could be here,
as PHP sessions can usually be bigger than the measly 4K
allowed for a cookie)'
}
/tmp/php_sessions/sess_a123456ebdf123 (a file on server, note the name):
(whatever you see in $_SESSION above, passed through serialize())
这也意味着您永远不会存储到您不希望用户看到或修改的Cookie数据中 - 例如如果您的代码设置了Cookie logged-in-user: Piskvor
,甚至is-admin: 1
,则无法阻止用户对内置浏览器工具执行相同操作。将此存储在会话变量中更安全,因为数据不直接暴露给用户,除非您的代码允许 - 所有用户看到的都是会话ID(会话ID不完美,请参阅“会话劫持”) - 但它们比cookie更安全。)
编辑TL; DR人群:使用会话时,他们通常由cookie支持,但他们不相同的东西。 我建议使用会话(出于上述原因;请注意,这通常意味着“通过Cookie”)。
答案 1 :(得分:1)
Cookie存储在用户的浏览器中。会话存储在服务器端。
如果您有任何敏感信息,请不要将它们放在cookie中,因为用户 - 或有权访问其计算机的人 - 可以使用它们做各种令人讨厌的事情。
如果您正在做出任何决定 - 比如决定某人是否已登录或拥有管理员权限 - 您可以使用该Cookie,然后将其映射到包含有趣/重要位的会话。
虽然您可以将Cookie设置为过期,但由于它们存储在浏览器中,因此可以由恶意用户进行调整。我之前调整了自己的cookie,永远不必再登录。 ;)由于会话是服务器端的 - 并且不必与用户共享 - 您可以确保会话在您需要时到期。
虽然您需要了解会话固定或重播攻击..所以它们也不完美。
答案 2 :(得分:0)
保存在Cookie中:
在身份验证检查中,检查user_id的哈希值是否等于存储在cookie中的哈希值。这样你就不必在服务器端存储任何东西。
答案 3 :(得分:0)
更好?两者都不是。
HTTP是一种无状态协议(无会话),用于创建某种会话,您可以使用cookie(在cookie中将客户端值存储在每个请求中)并将其作为URL参数传递(例如?sessionid = 2358734578}。
PHP会话只是为每个客户端分配一个sessionid并将其存储在cookie中,这可以作为客户端的标识符(您也可以将其配置为使用URL参数)。
基本上,您可以使用本机PHP会话实现,它在服务器端存储所有内容,为客户端提供通过cookie传递的ID,然后提供一种方法,您可以根据所述ID检索该会话的数据(通过cookie传递 - 或者你可以提出你自己的系统(你称之为'使用cookie')但最终它不会更好〜虽然作为双产品你可能最终理解HTTP更多的工作:)
另见CaseySoftware关于安全性考虑的答案。