用于php应用程序的cookie与会话

Oli*_*ton 2 php

在实现php登录系统会话或cookie时会有什么好处?

Pis*_*3.0 7

浏览器cookie:

  • 在客户端(浏览器)和服务器(PHP)之间共享
    • 除其他外,这意味着" 用户可以直接读/写数据,你无法控制或限制这个 "
  • 尺寸有限(4K)
  • 在每个页面请求中完整发送

PHP会话:

  • 仅存储在服务器上
  • 可以比饼干大得多
  • 通过小cookie或请求参数访问

PHP会话在后台创建一个cookie(PHPSESSID默认命名,可由session_name()配置),因此您可以使用cookie.可以将会话配置为 使用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())
Run Code Online (Sandbox Code Playgroud)

这也意味着您永远不应该存储您不希望用户看到或修改的cookie数据 - 例如,如果您的代码设置了cookie logged-in-user: Piskvor,或者甚至is-admin: 1,您无法阻止用户执行相同操作内置浏览器工具.将此存储在会话变量中更安全,因为数据不直接暴露给用户,除非您的代码允许 - 所有用户看到的都是会话ID(会话ID不完美,请参阅"会话劫持") - 但它们比cookie更安全.

编辑TL; DR人群:使用会话时,它们通常由cookie支持,但它们不是同一个东西.我建议使用会话(出于上述原因;请注意这通常意味着"通过cookie").

  • 不,他们根本不一样.Cookies是保存在用户侧,而会话存储在用户端的会话cookie,而且会话数据存储在服务器上,您可以在其中存储必须在会议期间被保存在内存中的数据上.服务器使用会话cookie将客户端映射到正确的会话. (3认同)