2

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

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

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

我想我真正要问的是, session_start() 到底做了什么

4

5 回答 5

0

会话 ID ( PHPSESSID ) 保存在用户浏览器的 cookie 中。如果没有找到/一个无效,它会创建一个。下图可能有助于了解您想了解的内容(来自 Chrome)。

在此处输入图像描述

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

于 2013-01-17T15:53:03.263 回答
0

session_start()只有在调用之前 PHP 页面上没有任何输出时才会存储 cookie 。如果输出了某些内容,则不会存储 cookie,您需要另一种方法(如前所述,SQLiteMySQL)来存储这些UNIQUE值并识别和分离每个用户。

于 2013-01-17T15:53:40.267 回答
0

默认情况下,包含会话 ID 的 cookie 设置为没有过期时间。这意味着它会在浏览器关闭时过期。因此会话将在此时丢失,因为客户端不再拥有旧的会话 ID。

于 2013-01-17T15:50:49.123 回答
0

为了简单地回答您的问题,它会查找名为PHPSESSID的 cookie ,如果请求中未提供 cookie,则会调用session_regenerate_id来初始化 cookie 值。

然后在浏览器的整个生命周期中持续使用 cookie。

除非应用其他设置,否则这是默认行为的精简版本。

于 2013-01-17T15:51:18.400 回答
0

你想知道的都已经写在这里了: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 目录中)并从那里获取数据。

于 2013-01-17T15:52:06.417 回答