【问题标题】:$_SESSION v. $_COOKIE$_SESSION 诉 $_COOKIE
【发布时间】:2012-07-02 11:25:17
【问题描述】:

大约几周前,我在创建登录页面时了解到$_SESSION。我可以成功登录并将其与变量一起使用。目前我正在尝试了解$_SESSION$_COOKIE。如果我错了,请纠正我,我可以在登录和移动页面时使用$_SESSION。使用$_COOKIE,用于记住我上次访问的时间和偏好。

涉及 cookie 的另一件事是,当网站使用广告(例如:Google AdSense)时,它们会使用 cookie 来跟踪访问者何时点击广告,对吧?

我可以同时使用 ($_SESSION & $_COOKIE)?我在某处读到您可以将 session_id 存储为 cookie 的值。

另外,我阅读了有关安全性的信息,让我发现:What do I need to store in the php session when user logged in?。当用户返回网站时,使用session_regenerate_id 是否有用?

还有这个:How to store a cookie with php 涉及uniqid

对于那些想知道登录的人,我使用电子邮件和密码。这样用户就可以更改他们的用户名。

我期待从任何愿意分享这两个方面知识的人那里了解更多关于这两个方面的信息。如果我问的问题太多,你可以回答你有更多经验的问题。

如果您需要更多信息,请尽管询问,因为我可能忘记包含某些内容。

谢谢。


找到这个:What risks should I be aware of before allowing advertisements being placed on my website?

【问题讨论】:

  • Session是服务器端存储,cookie-客户端。这是主要区别
  • 验证用户身份后,您应该重新生成会话 ID。如果人们知道会话 ID,则可以劫持会话,然后访问他们不应该拥有的信息。通过在身份验证后重新生成,您在很大程度上将其带走。此外,作为标准做法,如果您不了解全部含义,请不要将会话 ID 放在 URL 中。
  • @phpmeh:“在对用户进行身份验证后,您应该重新生成会话 ID”——没有理由这样做。 “如果人们知道会话 ID,他们就可以劫持会话”——如果他们可以获得会话 ID——那么重新生成不会添加任何内容

标签: php session cookies


【解决方案1】:

简单来说,$_SESSION$_COOKIE 是不同的。 两者都是 php 全局变量,但 cookie 的使用没有语言限制。 $_SESSION 就是将数据存储在服务器中,同时将会话 ID 存储为 cookie。 $_COOKIE浏览器发送 到服务器的 cookie。这是主要的区别。如果客户端浏览器禁用了 cookie,会话将无法工作。

- 安全性-

如果您检查浏览器发送的请求标头,您会注意到每个请求中都包含 cookie 信息。可以通过截断您的网络通信来跟踪它们。 任何拥有更好工具的人都可以编辑 cookie 数据。 切勿使用 cookie 存储密码! 如果您使用会话,则密码在服务器中,并且只有会话 ID cookie 将存储在客户端中,减少安全问题。 Chuck Norris 仍然可以劫持会话。

- 性能-

如果您在浏览器中存储 5 个 cookie,其中包含 200 个字节,则无论是 jpg 文件还是实际需要饼干信息。因此,这直接影响您的网站对最终用户的执行速度。

如果您使用会话,则服务器拥有这 1 KB 的数据,而客户端在每个页面请求中发送会话 ID。 您可以通过将静态文件转移到另一个无 cookie 的域来变得聪明。

- 终生 -

会话会及时清除。因此,如果您想长时间保存某些内容,请改用 cookie。大多数网站的“记住我”功能都是这样工作的(不过,它不存储密码。只是会话信息 - 不要与会话 ID 混淆)。

底线, 会话和 cookie 是不同的类型。 session 是相对安全的服务器端存储。经常被清除。 Cookie 可以有更长的生命周期,但它会影响性能(而不是 CPU/RAM -- 加载时间),除非您不牢记这一点。 如果有理由将 1 KB 存储为 cookie,那就太奇怪了。

永远不要相信来自$_GET/POST 的用户输入。对$_COOKIE 也进行同样的处理。 并且存在会话劫持。有人可以猜出其他人的会话 ID,尽管这几乎是不可能的。所以首先在服务器端使用一些验证。

【讨论】:

  • 那么存储了会话ID的cookie是我可以看到的cookie吗?就像我使用 IE 时一样,我可以找到包含来自不同站点的 cookie 的文件夹。如果 Chuck Norris 劫持了一个会话,李小龙就是我的安全保障。
  • 是的,会话 ID 存储在 cookie 中。这就是禁用 cookie 时会话不起作用的原因。
  • 嗯,我明白了。那么在使用cookies的时候,我使用session_id作为值呢?
  • 让 php 为你做这件事。 $_COOKIE['popup'] 可以包含“popup”cookie 的值。同样,$_SESSION['form_key'] 可以包含来自服务器会话存储的 form_key 值以及从客户端提交的会话 ID。
  • 好的。因此,如果我想记住我的功能,我应该只具有电子邮件的价值,对吗?如果我有广告,它会读取 php 的 session 制作的 cookie。
猜你喜欢
  • 2020-06-30
  • 2012-05-17
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2012-03-13
  • 1970-01-01
相关资源
最近更新 更多