没有cookie会话可以工作吗?如果是这样,在PHP中没有启用Cookie的情况下,会话如何工作?

没有cookie会话可以工作吗?如果是这样,在PHP中没有启用Cookie的情况下,会话如何工作?,php,session,cookies,Php,Session,Cookies,我正在搜索会话和Cookie的主要区别,以及何时使用会话和Cookie。请澄清。感谢作为链接到的另一个用户,是的,他们可以,php有一些配置选项不使用Cookie,而是依赖于将会话id作为url的一部分传递。您可以手动执行此操作,也可以让PHP执行此操作。如果PHP设置为自动添加ID,那么它将使用输出缓冲来替换它在输出中检测到的任何URL,默认情况下,它会在某些标记(a、表单等)上执行此操作 请参见此处的选项: 会话。使用cookies布尔值 session.use\u cookies指定 模块

我正在搜索会话和Cookie的主要区别,以及何时使用会话和Cookie。请澄清。感谢作为链接到的另一个用户,是的,他们可以,php有一些配置选项不使用Cookie,而是依赖于将会话id作为url的一部分传递。您可以手动执行此操作,也可以让PHP执行此操作。如果PHP设置为自动添加ID,那么它将使用输出缓冲来替换它在输出中检测到的任何URL,默认情况下,它会在某些标记(a、表单等)上执行此操作

请参见此处的选项:

会话。使用cookies
布尔值 session.use\u cookies指定 模块将使用cookies在客户端存储会话id。 默认值为1(已启用)

会话。使用\u trans\u sid
布尔值 session.use_trans_sid是否 是否启用透明sid支持。默认值为0(已禁用)

session.trans\u sid\u标记
string session.trans_sid_标记指定 HTML标记被重写,以包含透明sid时的会话id 支持已启用。默认为 a=href,area=href,frame=src,input=src,form=form是特殊标记。作为表单变量添加

并注意其警告:

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

Cookies和会话 通常会话确实使用cookies。您询问会话和cookie之间的区别;虽然这两种方法并不具有可比性,但以下是关于它们的一些信息:

曲奇饼 Cookie是一种在浏览器存储中本地存储简单键/值对的方法,然后可以在浏览器重新启动之间保持,但用户可以擦除它们。Cookie的总容量不能超过4KB(请参阅)

从文档中:

会议 当您调用
session\u start()
php检查cookies是否已经设置了“会话id”,如果没有,则设置一个。然后,它使用它来标识用户/会话,并允许您在服务器上临时保存属于此id的数据。每次调用session\u start时,它将填充$\u session,并在每个脚本结束时保存此数据。这意味着如果两个页面都使用会话,则无法同时加载它们。这里可以看到一些很好的会话示例:

会话本身没有限制,但受到其他因素的限制(请参阅)

总结
  • 会话通常使用cookies
  • Cookie数据存储在本地,会话数据存储在服务器上
  • Cookie数据大小限制相对较小(4K),会话数据仅受其他因素的限制
  • Cookie数据只是简单的键/值对,会话数据也可以是数组、对象

如果可以共享,则不能进行私人会话。让一个私有会话在请求URL中显示您的私有令牌是没有意义的。我宁愿要求用户启用cookies!如果它是一个公共会话,那么是的,您可以使用no Cookie会话。如果您非常希望使用参数会话,则令牌需要是用户代理和ip地址以及主机名的散列,这样,如果从另一个ip地址或其他浏览器访问它,它将无效,并且会话将被撤销。
$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"];