谷歌浏览器:会话启动时,PHP代码将执行两次

时间:2015-11-09 14:18:10

标签: php variables session double runtime

我需要为每个文档加载设置动态ID。此ID应在PHP中设置。现在,当我设置session_start()时,php代码将被执行两次,因为生成的文档源中的ID代码与alert脚本变量中的相同代码不同。没有运行时错误。

此代码出了什么问题?如何在session_start()之后阻止会话重新执行我的代码?

当代码执行两次(var idvar包含不同的值)时,为什么heck只执行一次警报?

我简化了脚本,以便您可以尝试自己:

<?php

// Session start generates two different ID's
session_start();

// Create ID
$time = microtime(1);
$parts = explode('.', (string)$time);
$idvar = strtoupper(strrev(dechex($parts[0]) . dechex($parts[1]))) . dechex(rand());

?>

<script>
    // Contains a new generated ID after session_start()
    var IDvr = '<?php print $idvr; ?>';
    alert(IDvr);
</script>

截图:

Alert dialog Browser Source (Chrome) of the same page!

2 个答案:

答案 0 :(得分:1)

尝试在session_start()之前移动id初始化,我怀疑它与session_start()之后在php中执行的内容有关。

修改 仍然无法重现它 enter image description here

答案 1 :(得分:0)

我发现了这个:

PHP Session storing behavior into variables? 但即使我在页面中添加了一个图标,它也无法正常工作。该页面也是独立的,不包含在另一页面中。

即使这不起作用!

// Session start generates two different ID's
if(!isset($_SESSION) && !isset($idvr)) {
    session_start();
    // Create ID
    $time = microtime(1);
    $parts = explode('.', (string)$time);
    $idvr  = strtoupper(strrev(dechex($parts[0]) . dechex($parts[1]))) . dechex(rand());
}

更新

现在更正了:

使用view-source:pgname和session初始化后,代码将在源视图中再次执行!