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