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

时间:2017-02-21 22:26:11

标签: php session cookies

我正在搜索主要差异黑白会话和cookie以及何时使用会话和cookie。请澄清。谢谢

1 个答案:

答案 0 :(得分:2)

当另一个用户链接到,是的他们可以,有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路径。重写目标   hosts由session.trans_sid_hosts定义。

Cookie和会话

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

缓存

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

摘要

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