为什么我的代码通过session_start运行两次?

时间:2019-04-16 18:28:45

标签: php session counter

我创建了两个文件(test.php和test2.php)。

test.php应该增加数据库中的计数器。然后应该将其重定向到test2.php

一切正常,但是现在我设置了$ _SESSION,现在将其计数器增加了2。没有session_start可以正常工作,但是却没有设置我的$ _SESSION。

test.php

<?php
    if (!isset($_SESSION)) { session_start(); }

    include_once("dbtest.php");
    $id = mysqli_real_escape_string($conn, $_GET["id"]);

    mysqli_query($conn, "update users set clicks = clicks + 1 where id = ".$id);
    $_SESSION['test_id'] = $id;

    header("Location: test2.php");
?>

test2.php

<?php
    if (!isset($_SESSION)) { session_start(); }

    if(isset($_SESSION['test_id'])) {
       echo $_SESSION['test_id'];
    }
?>

应将计数器增加1。

1 个答案:

答案 0 :(得分:0)

似乎与浏览器或客户端发送的OPTIONS方法有关。

我认为他们将其称为"pre flight"浏览器/客户端的内部检查,以查看request是否具有有效的HEADERS

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS

要调试, 在打开日志持久性的情况下输入浏览器/客户端的网络调试。

回答问题:

即使发送了OPTIONS HTTP方法,您的某些代码也会被执行。即使您使用的是PHP框架,也可能发生同样的情况,因此也可能是由于您使用的客户端或浏览器所致。