PHP中的Session和Cookies之间有什么区别?
Answers:
Cookie是浏览器存储的一点数据,并随每个请求发送到服务器。
会话是存储在服务器上并与给定用户相关联的数据的集合(通常通过包含ID码的Cookie)
Cookies用于识别会话。访问任何使用Cookie的网站,并打开Chrome检查元素,然后打开网络或FireBug(如果使用Firefox)。
您会看到有一个发送到服务器的标头,也收到了一个名为Cookie的标头。通常,它包含一些个人信息(例如ID),可以在服务器上使用该个人信息来标识会话。这些cookie保留在您的计算机上,您的浏览器负责将其仅发送到使用它标识的域。
如果没有cookie,那么您将通过GET或POST在每个请求上发送唯一的ID。Cookies就像静态ID一样,会在您的计算机上保留一段时间。
一会是一组与该cookie信息相关的服务器上的信息。如果您使用的是PHP,则可以检查session.save_path的位置并实际“查看会话”。它们是服务器文件系统上的文件,也可以是数据库中的文件。
是浏览器(客户端)中保存的少量数据
可以通过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示例(另请参见此处):
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设置没有到期日,因此,当浏览器关闭时它就会过期。因此,当关闭/重新打开浏览器时,“会话”不再有效。
可以在PHP中设置/读取 $_SESSION
客户端看不到会话数据,而只能看到ID:在中执行此操作index.php
:
<?php
session_start();
$_SESSION["abc"]="def";
?>
在客户端上唯一看到的是会话ID(如上所述):
因此,会话对于存储客户端不希望看到或修改的数据非常有用
如果您要使用自己的数据库+ ID,并使用传统的Cookie向客户端发送ID /令牌,则可以完全避免使用会话