PHP中的会话(Sessions)和Cookie有何区别?
PHP中的会话(Sessions)和Cookie有何区别?
Cookie是存储在浏览器中的一小段数据,并在每个请求中与服务器一起发送。
会话是存储在服务器上并与给定用户关联的数据集(通常通过包含id代码的cookie进行关联)。
Cookies用于识别会话。访问任何使用Cookie的站点并打开Chrome检查元素和网络或FireBug(如果使用Firefox),您就可以看到发送到服务器和接收到的标题叫做Cookie。通常它包含一些个人信息(如ID),可以在服务器上用于识别会话。这些Cookies保存在您的计算机上,您的浏览器负责仅将它们发送到标识为与之相关的域。
如果没有Cookie,则每次请求都会通过GET或POST发送唯一的ID。 Cookie类似于静态ID,可以在您的计算机上保留一段时间。
会话是与cookie信息相关联的服务器上的信息组。如果您使用PHP,可以检查session.save_path位置并实际上“查看会话”。它们可以是服务器文件系统上的文件或数据库中支持的文件。
会话和Cookie的主要区别在于会话数据存储在服务器上,而Cookie在访问者的浏览器中存储数据。
会话比Cookie更安全,因为它存储在服务器上,而Cookie可以从浏览器中关闭。
存储在Cookie中的数据可以根据Cookie的生命周期存储数月或数年。但是当Web浏览器关闭时,会话中的数据将丢失。
是在浏览器(客户端)保存的少量数据。
可以使用 PHP 中的 setcookie
进行设置,然后会发送到客户端的浏览器(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 进行设置/获取。以 Python 中的 "bottle" 微框架为例(也可在此处查看):
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();
时:
PHPSESSID
cookie 没有设置过期时间,因此它会在浏览器关闭时过期。这意味着当浏览器关闭/重新打开时,“会话”不再有效。
可以使用 $_SESSION
在 PHP 中设置/读取会话数据
客户端无法看到会话数据,只能看到会话 ID:在 index.php
中执行以下操作:
<?php
session_start();
$_SESSION["abc"]="def";
?>
客户端看到的唯一东西是(如上所述)会话ID:
因此,会话对于存储您不希望客户端查看或修改的数据非常有用
如果您想使用自己的数据库+ ID并向客户端发送ID /令牌以及传统Cookie,则可以完全避免使用会话
会话是在服务器上维护的一块数据,用于在 HTTP 请求之间保持状态。HTTP 基本上是一种无状态协议;会话被用于赋予其状态性。
Cookie 是发送到客户端并返回的一小段数据。Cookie 经常被用来 方便 会话,因为它告诉服务器哪个客户端处理了哪个会话。还有其他方法可以做到这一点(如查询字符串魔法等),但 Cookie 可能是最常见的方法。
Cookies以文本文件格式存储在浏览器中。它们只能存储有限数量的数据,最多可达4kb [4096字节]。单个Cookie无法保存多个值,但是我们可以拥有多个Cookie。
由于Cookies易受攻击,因此它们不太安全。setcookie()函数必须出现在标签之前。
Sessions存储在服务器端。对于Session没有存储限制。Sessions可以保存多个变量。由于它们不易被攻击,因此比Cookies更加安全。
所有这些解释中缺少的一部分是Cookie和Session如何链接-通过SessionID Cookie。Cookie在客户端和服务器之间来回传递,服务器通过Cookie的SessionID部分来连接用户(及其会话)。您也可以通过URL发送SessionID(不是最佳实践)-以防止客户端禁用Cookie。
我理解得对吗?
会话用于维护服务器和用户之间的对话。它更加安全,因为它存储在服务器上,我们不能轻易地访问它。它在用户计算机上嵌入了cookie。它可以存储无限量的数据。
Cookie 存储在本地计算机上。基本上,它维护用户标识,意味着它跟踪访客记录。相比会话,它不太安全。它只能存储有限量的数据,并且只维护一段时间。