我的代码如何知道客户端/浏览器是否已收到会话ID?

时间:2016-02-04 21:18:05

标签: php ajax session

当创建会话并将数据存储到其中时,如果会话ID尚未返回到客户端,则从客户端到服务器的多次调用将导致$_SESSION对象中显示不同的数据。

例如:

  1. 客户端使用ajax请求页面:“/very_slow.php”
  2. “very_slow.php”设置会话变量:$_SESSION[ "status" ] = "started"
  3. “very_slow.php”然后开始做一些需要30-40秒的事情
  4. 客户端使用ajax立即调用另一个页面:“/ check_session_variable.php”检查$_SESSION[ "status" ]
  5. 如果步骤#2必须创建会话(session_start();)但尚未返回到客户端,则步骤#4将不会在$_SESSION[ "status" ]中看到新值。

    所以我需要能够检查客户端是否还有会话ID。我该怎么做?

    检查session_id()不起作用,因为如果任何代码调用session_start(),那么即使客户端尚未在响应中收到它,我也会返回一个值。

1 个答案:

答案 0 :(得分:2)

客户端使用ajax请求页面之前:" /very_slow.php" 客户端可能打开了一个带有一些HTML和Javascript的页面,这会产生ajax请求。在那里开始会议。会话ID将作为HTTP标头发送到客户端,并将在步骤1中由xhr使用。它将保证步骤1..4的会话cookie。