【问题标题】:Can sessions work without cookies? If so, how does a session work without cookies enabled in PHP?会话可以在没有 cookie 的情况下工作吗?如果是这样,如果没有在 PHP 中启用 cookie,会话如何工作?
【发布时间】:2017-02-21 22:26:10
【问题描述】:

我正在寻找主要区别黑白会话和 cookie 以及何时使用会话和 cookie。请澄清。谢谢

【问题讨论】:

标签: php session cookies


【解决方案1】:

作为另一个链接到的用户,是的,他们可以,php 有一些配置选项不使用 cookie,而是依赖于将会话 ID 作为 url 的一部分传递。您可以手动执行此操作,也可以让 PHP 执行此操作。如果 PHP 设置为自动添加 ID,那么它会使用输出缓冲来替换它在输出中检测到的任何 url,默认情况下它会在某些标签(a、form 等)上执行此操作

在此处查看选项:http://php.net/manual/en/session.configuration.php

session.use_cookies 布尔值 session.use_cookies 指定是否 模块将使用 cookie 将会话 ID 存储在客户端。 默认为 1(启用)。

session.use_trans_sid 布尔值 session.use_trans_sid 是否 是否启用透明 sid 支持。默认为 0(禁用)。

session.trans_sid_tags 字符串 session.trans_sid_tags 指定哪个 当透明 sid 时,HTML 标记被重写以包含会话 id 支持已启用。默认为 a=href,area=href,frame=src,input=src,form= form 是特殊标签。被添加为表单变量。

还要注意它的警告:

注意:基于 URL 的会话管理具有额外的安全风险 与基于 cookie 的会话管理相比。用户可以发送一个 URL 包含通过电子邮件发送给朋友的活动会话 ID,或者用户可以 将包含会话 ID 的 URL 保存到他们的书签并访问 例如,您的站点始终具有相同的会话 ID。自 PHP 7.1.0,完整的 URL 路径,例如https://php.net/,由 trans sid 功能处理。以前的 PHP 只处理相对 URL 路径。重写目标 主机由 session.trans_sid_hosts 定义。

Cookie 和会话

通常会话确实使用 cookie。您询问了会话和 cookie 之间的区别;虽然没有真正的可比性,但这里有一些关于它们的信息:

Cookies

Cookie 是一种在浏览器存储中本地存储简单键/值对的方法,然后可以在浏览器重新启动之间持续存在,但用户可以擦除它们。 Cookie 总大小不能超过 4KB(请参阅What is the maximum size of a web browser's cookie's key?

来自文档:http://php.net/manual/en/function.setcookie.php

$value = 'something from somewhere';

setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);  /* expire in 1 hour */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);

// Print an individual cookie
echo $_COOKIE["TestCookie"];

会话

当您调用session_start() 时,php 检查 cookie 以查看它是否已经设置了“会话 id”,如果没有设置。然后它使用它来识别用户/会话,并允许您将数据临时保存在归因于该 ID 的服务器上。每次调用 session_start 时,它都会填充 $_SESSION,并在每个脚本结束时保存它。这确实意味着如果页面都使用会话,则它们不能同时加载。可以在这里看到一些很好的会话示例:https://www.w3schools.com/php/php_sessions.asp

会话本身没有限制,但会受到其他因素的限制(请参阅Maximum size of a PHP session

总结

  • 会话一般使用cookies
  • Cookie 数据存储在本地,Session 数据存储在服务器上
  • Cookie Data 大小限制比较小(4K),Session Data 只受其他东西限制。
  • Cookie 数据只是简单的键/值对,Session 数据也可以是数组、对象

【讨论】:

  • 如果可以共享,则不能进行私人会话。在请求 URL 中显示您的私有令牌的私有会话是没有意义的。我宁愿要求用户启用cookies!如果它是公共会话,那么可以,您可以不使用 cookie 会话。
  • 如果你很绝望并且想使用参数会话,令牌需要是用户代理和 IP 地址和主机名的哈希值,如果它是从另一个 IP 地址访问的,这样或其他浏览器将失效,会话将被撤销。
猜你喜欢
  • 2017-07-23
  • 1970-01-01
  • 2014-08-22
  • 2017-01-08
  • 2015-01-03
  • 1970-01-01
  • 2017-12-28
  • 2010-10-11
  • 1970-01-01
相关资源
最近更新 更多