PHP中会话和 Cookie 的区别是什么?
答案 0 :(得分:85)
Cookie是浏览器存储的一些数据,每次请求都会发送到服务器。
会话是存储在服务器上并与给定用户相关联的数据集合(通常通过包含id代码的cookie)
答案 1 :(得分:47)
Cookie 用于标识会话。访问任何使用Cookie的网站,如果使用Firefox,请启动Chrome检查元素,然后选择网络或FireBug。
您可以看到有一个标头已发送到服务器,并且还收到了名为Cookie的标头。通常它包含一些个人信息(如ID),可以在服务器上用来识别会话。这些cookie保留在您的计算机上,您的浏览器负责将它们仅发送到使用它识别的域。
如果没有cookie,那么您将通过GET或POST在每个请求上发送唯一ID。 Cookie就像静态ID,可以在您的计算机上保留一段时间。
会话是服务器上与Cookie信息关联的一组信息。如果您正在使用PHP,则可以检查session.save_path位置并实际“查看会话”。它们可以是服务器文件系统上的文件,也可以是数据库中的文件。
答案 2 :(得分:11)
会话是服务器上维护的一大块数据,用于维护HTTP请求之间的状态。 HTTP基本上是一种无状态协议;会话用于赋予其有状态。
Cookie是发送到客户端并从客户端返回的数据片段。 Cookie通常用于促进会话,因为它告诉服务器哪个客户端处理了哪个会话。还有其他方法可以做到这一点(查询字符串魔术等),但cookie可能是最常见的。
答案 3 :(得分:10)
会话和cookie之间的主要区别在于会话数据存储在服务器上,而cookie将数据存储在访问者的浏览器中。
会话比cookie更安全,因为它存储在服务器中。可以从浏览器关闭Cookie。
存储在cookie中的数据可以存储数月或数年,具体取决于cookie的生命周期。但是当Web浏览器关闭时,会话中的数据会丢失。
答案 4 :(得分:6)
Cookie 以文本文件格式存储在浏览器中。它存储有限数量的数据,最多 4kb [4096bytes] 。单个Cookie无法保存多个值但是,我们可以有多个cookie。
Cookie易于访问,因此安全性较低。 setcookie()函数必须出现在标记之前。
会话存储在服务器端。会话没有这样的存储限制。会话可以容纳多个变量。因为它们不容易访问,因此比cookie更安全。
答案 5 :(得分:5)
是浏览器(客户端)中保存的少量数据
setcookie
从PHP设置,然后将其发送到客户端的浏览器(HTTP响应标头Set-cookie
)
可以在Javascript中直接在客户端设置:document.cookie = 'foo=bar';
如果未设置任何失效日期,默认情况下,它将在关闭浏览器时失效。
示例:继续http://example.com,打开控制台,执行document.cookie = 'foo=bar';
。关闭选项卡,重新打开相同的网站,打开控制台,执行document.cookie
:您将看到foo=bar
仍然存在。现在关闭浏览器并重新打开,重新访问同一网站,打开控制台;您会看到document.cookie
为空。
您还可以设置精确的到期日期,而不是“关闭浏览器时删除”。
浏览器中存储的cookie将在同一网站的每个请求的标头中发送到服务器(请参见Cookie
)。例如,您可以通过打开开发人员工具>网络在Chrome上看到此情况,单击请求,请参见标题:
document.cookie
在客户端读取
可以在服务器端使用$_COOKIE['foo']
奖金:也可以使用非PHP的其他语言来设置/获取。带有“瓶”微框架(see also here)的Python中的示例:
from bottle import get, run, request, response
@get('/')
def index():
if request.get_cookie("visited"):
return "Welcome back! Nice to see you again"
else:
response.set_cookie("visited", "yes")
return "Hello there! Nice to meet you"
run(host='localhost', port=8080, debug=True, reloader=True)
是与保存在服务器端
每种服务器端语言可能以不同的方式实现它
在PHP中,当调用session_start();
时:
jo96fme9ko0f85cdglb3hl6ah6
/var/lib/php5/sess_jo96fme9ko0f85cdglb3hl6ah6
使用上面详细介绍的传统cookie机制,在HTTP响应标头中将会话ID发送到客户端:Set-Cookie: PHPSESSID=jo96fme9ko0f85cdglb3hl6ah6; path=/
:
(也可以通过URL而不是cookie进行发送,但不能通过默认行为发送)
您可以使用document.cookie
在客户端看到会话ID:
PHPSESSID
cookie的设置没有到期日期,因此它将在关闭浏览器时到期。因此,当关闭/重新打开浏览器时,“会话”不再有效。
$_SESSION
在PHP中设置
客户端看不到会话数据,而只能看到ID:在index.php
中看到此数据:
<?php
session_start();
$_SESSION["abc"]="def";
?>
在客户端上唯一看到的是会话ID(如上所述):
因此,会话对于存储您不希望客户端看到或修改的数据很有用
如果要使用自己的数据库+ ID并使用传统的Cookie将ID /令牌发送给客户端,则可以完全避免使用会话
答案 6 :(得分:1)
Cookie:Cookie通常用于识别用户。 Cookie是服务器嵌入用户计算机的小文件。每次同一台计算机通过浏览器请求页面时,它也会发送cookie。
会话:会话用于存储有关用户会话的信息或更改用户会话的设置。会话变量保存有关单个用户的信息,并且可用于一个应用程序中的所有页面。
答案 7 :(得分:1)
会话用于维护服务器和用户之间的对话。 它更安全,因为它存储在服务器上,我们无法轻松访问它。 它在用户计算机上嵌入cookie。它存储无限数据。
Cookie存储在本地计算机上。基本上,它维护用户识别,这意味着它跟踪访客记录。它不如会话安全。 它存储有限数量的数据,并在有限的时间内维护。
答案 8 :(得分:1)
所有这些说明中缺少的一部分是Cookie和Session如何通过SessionID cookie链接。 Cookie在客户端和服务器之间来回移动-服务器通过cookie的会话ID部分链接用户(及其会话)。 您还可以通过url发送SessionID(这不是最佳做法),以防客户端禁用cookie。
我说对了吗?