如果浏览器关闭并重新打开,PHP 将启动一个新会话。
旧会话文件仍保存在会话保存目录中,但会启动一个新会话。
php 在浏览器中查找什么来知道它必须启动一个新会话?
我想我真正要问的是, session_start() 到底做了什么
session_start()
只有在调用之前 PHP 页面上没有任何输出时才会存储 cookie 。如果输出了某些内容,则不会存储 cookie,您需要另一种方法(如前所述,SQLite
或MySQL
)来存储这些UNIQUE
值并识别和分离每个用户。
默认情况下,包含会话 ID 的 cookie 设置为没有过期时间。这意味着它会在浏览器关闭时过期。因此会话将在此时丢失,因为客户端不再拥有旧的会话 ID。
为了简单地回答您的问题,它会查找名为PHPSESSID的 cookie ,如果请求中未提供 cookie,则会调用session_regenerate_id来初始化 cookie 值。
然后在浏览器的整个生命周期中持续使用 cookie。
除非应用其他设置,否则这是默认行为的精简版本。
你想知道的都已经写在这里了:http ://www.php.net/manual/en/function.session-start.php
session_start() 根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。
当 session_start() 被调用或会话自动启动时,PHP 将调用打开和读取会话保存处理程序。这些将是默认提供的内置保存处理程序或由 PHP 扩展(例如 SQLite 或 Memcached)提供;或者可以是 session_set_save_handler() 定义的自定义处理程序。读取回调将检索任何现有的会话数据(以特殊的序列化格式存储)并将被反序列化并用于在读取回调将保存的会话数据返回给 PHP 会话处理时自动填充 $_SESSION 超全局变量。
基本上,PHP 在文件系统中写入一个特殊文件(通常在 /tmp 目录中)并从那里获取数据。