PHP中的Sessions和Cookies有什么区别?

时间:2011-06-14 06:19:32

标签: php session cookies session-state session-cookies

PHP中会话 Cookie 的区别是什么?

9 个答案:

答案 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位置并实际“查看会话”。它们可以是服务器文件系统上的文件,也可以是数据库中的文件。

Screenshot of a Cookie

答案 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上看到此情况,单击请求,请参见标题

    enter image description here

  • 可以使用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();时:

      服务器生成一个随机ID,例如jo96fme9ko0f85cdglb3hl6ah6
    • 文件保存在服务器上,其中包含数据: /var/lib/php5/sess_jo96fme9ko0f85cdglb3hl6ah6
    • 使用上面详细介绍的传统cookie机制,在HTTP响应标头中将会话ID发送到客户端:Set-Cookie: PHPSESSID=jo96fme9ko0f85cdglb3hl6ah6; path=/

      enter image description here

      (也可以通过URL而不是cookie进行发送,但不能通过默认行为发送)

    • 您可以使用document.cookie在客户端看到会话ID:

      enter image description here

  • PHPSESSID cookie的设置没有到期日期,因此它将在关闭浏览器时到期。因此,当关闭/重新打开浏览器时,“会话”不再有效。

  • 可以使用$_SESSION

    在PHP中设置
  • 客户端看不到会话数据,而只能看到ID:在index.php中看到此数据:

    <?php
    session_start();
    $_SESSION["abc"]="def";
    ?>
    

    在客户端上唯一看到的是会话ID(如上所述):

    enter image description here

  • 因此,会话对于存储您不希望客户端看到或修改的数据很有用

  • 如果要使用自己的数据库+ 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。

我说对了吗?