Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Php假定会话启动后没有启动?_Php_Session - Fatal编程技术网

为什么Php假定会话启动后没有启动?

为什么Php假定会话启动后没有启动?,php,session,Php,Session,各位 为什么在第二页加载同一页时,ELSEIF不会触发 我的期望: 在第一个页面加载时,IF应该触发,因为在开始时没有会话 然后应该开始一个会话。设置为“$”会话['form\u step']='start' 最后,设置为: $_SESSION['form_step'] = 'end'; 在第2页加载重新加载的同一页时,ELSEIF应触发,因为之前已启动会话,并将其设置为:$\u session['form\u step']='end' 编辑1 我根据Alvaro Gonzales和Ben F

各位

为什么在第二页加载同一页时,ELSEIF不会触发

我的期望: 在第一个页面加载时,IF应该触发,因为在开始时没有会话

然后应该开始一个会话。设置为“$”会话['form\u step']='start'

最后,设置为:

$_SESSION['form_step'] = 'end';
在第2页加载重新加载的同一页时,ELSEIF应触发,因为之前已启动会话,并将其设置为:$\u session['form\u step']='end'

编辑1 我根据Alvaro Gonzales和Ben Foster的建议编辑了以下代码:

<?php
error_reporting(E_ALL);
session_start();

if(!session_id() || session_id() != $session_id || $_SESSION['form_step'] != 'end') 
{
    session_start();
    $_SESSION['form_step'] = 'start';
    echo "Line: 28 "; echo "Session Step: "; echo $_SESSION['form_step']; echo "<br>";
    echo "Line: 29 "; echo "New Session Id: "; echo session_id(); echo "<br>";
    $_SESSION['form_step'] = 'end';
    $session_id = session_id();
}
elseif($_SESSION['form_step'] == 'end') //Q2. WHY THIS IF GETS TRIGGERED WHEN CLICKING ANY NUMBERED PAGE LINKS (ON PAGINATION SECTION (EG PAGE 1 2 3 ETC.)) SINCE SESSION ID ALREADY EXISTS DUE TO ['form_step'] = 'end' ?
{
    echo "Line: 35 "; echo "Session Step: "; echo $_SESSION['form_step']; echo "<br>";
    echo "Line: 36 "; echo "New Session Id: "; echo session_id(); echo "<br>";
}
如何在不看到错误的情况下修复此问题? 注意:在页面第一次加载时,我需要修改IF以触发它,这样它就不会发现任何会话并创建一个会话

Sets $_SESSION['form_step'] = 'start';
Then $_SESSION['form_step'] = 'end';
然后,当我重新加载页面时,我需要PHP找到$\u会话['form\u step']=='end',并再次触发IFELSE而不是相同的IF

为什么我需要在页面重新加载时触发ELSEIF?因为当重新加载页面时,我需要触发任务2。当第一次加载页面时,我需要触发任务1

IF处理任务1。ElseIF处理任务2。 这是一个复杂的脚本。我在这里只给出了一个相关的片段

编辑2 如果我将If留给以下人员:

然后,IF从不触发。总是其他的。 我需要在页面第一次加载时触发IF,启动会话并执行第一个任务。 然后,只要会话存在,在每次页面刷新/重新加载时,我都需要触发ELSEIF来执行第二个任务。 此代码不起作用

<?php
error_reporting(E_ALL);
session_start();

if(!session_id()) 
{
    session_start();
    $_SESSION['form_step'] = 'start';
    echo "Line: 28 "; echo "Session Step: "; echo $_SESSION['form_step']; echo "<br>";
    echo "Line: 29 "; echo "New Session Id: "; echo session_id(); echo "<br>";
    $_SESSION['form_step'] = 'end';
    $session_id = session_id();
}
elseif($_SESSION['form_step'] == 'end')
{
    echo "Line: 35 "; echo "Session Step: "; echo $_SESSION['form_step']; echo "<br>";
    echo "Line: 36 "; echo "New Session Id: "; echo session_id(); echo "<br>";
}
在尝试访问任何会话变量之前,即使在刷新页面时,也需要调用会话\u start

因此,刷新页面时,会话当前未处于活动状态。因此,if语句的计算结果为true


尝试将会话\u start移到文件的顶部。

我不清楚您想做什么。但这应该基于我对预期行为的理解

error_reporting(E_ALL);
session_start();

if (!isset($_SESSION['form_step']) || $_SESSION['form_step'] !== 'end') {
    // This will be overwrited before the end of this page load.
    $_SESSION['form_step'] = 'start';
    echo "Line: ".__LINE__;
    echo "Session Step: ";
    echo $_SESSION['form_step'];
    echo "<br>";
    echo "Line: ".__LINE__;
    echo "New Session Id: ";
    echo session_id();
    echo "<br>";
    $_SESSION['form_step'] = 'end';
    // This variable is never used, you might want to get rid of it.
    $session_id = session_id();
} else {
    echo "Line: ".__LINE__;
    echo "Session Step: ";
    echo $_SESSION['form_step'];
    echo "<br>";
    echo "Line: ".__LINE__;
    echo "New Session Id: ";
    echo session_id();
    echo "<br>";
}

会议开始;是什么填充了$_SESSION.Ben Foster,但是由于我在第一次加载页面时启动了会话,并且没有取消或破坏会话,那么当我第二次加载页面时,为什么会话仍然可用?是什么使它不安或毁灭了它?这是我的大问题。另外,在我的页面重新加载时,是否会出现会话已启动的错误?@TigerCoder会话可用。这只是PHP默认情况下不会加载的内容,就像它默认情况下不会从数据库中获取数据一样。@Ben Foster,我问过你们了。我犯了一个错误。我更新了我原来的帖子。见标题编辑谢谢大家!@阿尔瓦罗·冈萨雷斯,谢谢你的回答。但是,如果你不介意的话,你能给我一个代码示例,说明如何达到我的目的吗?我在我最初的帖子标题“编辑”下提到了我的目的谢谢大家!@你的代码从上到下运行。您在第6行读取$session_id,并在第12行定义其值。Julien B,我测试了您的代码。它在页面加载的第一轮触发IF。然后在同一页面加载的所有其他轮上触发ELSE。这就是我想要的!谢谢现在,我明天将集成我的代码,看看您的代码是否有效。应该的!非常感谢!如果它不起作用,我会再打给你的!干杯
Sets $_SESSION['form_step'] = 'start';
Then $_SESSION['form_step'] = 'end';
if(!session_id())
<?php
error_reporting(E_ALL);
session_start();

if(!session_id()) 
{
    session_start();
    $_SESSION['form_step'] = 'start';
    echo "Line: 28 "; echo "Session Step: "; echo $_SESSION['form_step']; echo "<br>";
    echo "Line: 29 "; echo "New Session Id: "; echo session_id(); echo "<br>";
    $_SESSION['form_step'] = 'end';
    $session_id = session_id();
}
elseif($_SESSION['form_step'] == 'end')
{
    echo "Line: 35 "; echo "Session Step: "; echo $_SESSION['form_step']; echo "<br>";
    echo "Line: 36 "; echo "New Session Id: "; echo session_id(); echo "<br>";
}
error_reporting(E_ALL);
session_start();

if (!isset($_SESSION['form_step']) || $_SESSION['form_step'] !== 'end') {
    // This will be overwrited before the end of this page load.
    $_SESSION['form_step'] = 'start';
    echo "Line: ".__LINE__;
    echo "Session Step: ";
    echo $_SESSION['form_step'];
    echo "<br>";
    echo "Line: ".__LINE__;
    echo "New Session Id: ";
    echo session_id();
    echo "<br>";
    $_SESSION['form_step'] = 'end';
    // This variable is never used, you might want to get rid of it.
    $session_id = session_id();
} else {
    echo "Line: ".__LINE__;
    echo "Session Step: ";
    echo $_SESSION['form_step'];
    echo "<br>";
    echo "Line: ".__LINE__;
    echo "New Session Id: ";
    echo session_id();
    echo "<br>";
}