php如何知道开始一个新的会话

时间:2013-01-17 15:44:24

标签: php session

如果浏览器关闭并重新打开,PHP将启动一个新会话。

旧会话文件仍保留在会话保存目录中,但会启动新会话。

php在浏览器中寻找什么才能知道它必须启动一个新会话?

我想我真正在问的是,session_start()在幕后做了什么

5 个答案:

答案 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)。

enter image description here

一旦PHP获得此会话ID,它就会查找存储在会话save_path中的相应会话(在unix机器上通常为/tmp)。然后,它使您能够使用$_SESSION超全局访问存储在该会话文件中的信息。

答案 4 :(得分:0)

只有在session_start()电话之前PHP页面上没有输出任何内容时,才会存储cookie。如果输出了某些内容,则不会存储Cookie,您需要使用其他方法(如SQLiteMySQL所述)来存储这些UNIQUE值并识别并分隔每个用户。< / p>