使用PHP会话维护状态

使用PHP会话维护状态,php,session,session-variables,session-state,Php,Session,Session Variables,Session State,PHP无法维护该状态,假设在一个进程中初始化的变量将丢失,如果页面重新加载,我正在阅读Stack over flow上的一些答案,但不幸的是,我无法从中获得太多,我所知道的是,为了保持状态,我需要使用Session,我有一个非常简单的脚本来学习Session是如何工作的 index.php <?php if ( !isset($_SESSION['id']) ){ session_start(); $_SESSION['id'] = 1; echo "Session started a

PHP无法维护该状态,假设在一个进程中初始化的变量将丢失,如果页面重新加载,我正在阅读Stack over flow上的一些答案,但不幸的是,我无法从中获得太多,我所知道的是,为了保持状态,我需要使用Session,我有一个非常简单的脚本来学习Session是如何工作的

index.php

 <?php 
if ( !isset($_SESSION['id']) ){
session_start();
$_SESSION['id'] = 1;
echo "Session started at index.php and id is =";
echo $_SESSION['id'];
}
 else {
++$_SESSION['id'];
echo "The session id is  : ".$_SESSION['id'];
}
?>
 <br>
 <a href="index.php">Index.php</a>
你能告诉我我做错了什么吗?我如何使用会话保持状态? 我最终要做的是,在我希望将数据附加到该对象的实例变量(数组)中的每一篇文章上,在会话变量中存储一个对象

对不起,我的英语不好。这方面的任何帮助都将是巨大的

session_start();


问题在于,在第一次加载时,您正在检查会话,默认情况下,在启动会话之前,会话不存在,然后启动会话并将ID设置为1。从那以后,它将是“1”。也。。每次加载时都需要启动一个会话,因此需要在IF和ELSE中使用

<?php 
if (!$_SESSION){
    session_start();
    $_SESSION['id'] = 1;
    echo "Session has been initiated at index.php and id is =". $_SESSION['id'];
} else {
    session_start();
    $_SESSION['id']++;
    echo "The session id is  : ".$_SESSION['id'];
}
?>
<br>
<a href="index.php">Index.php</a>


现在由于某种原因。。如果您有上一个会话并链接到索引,则ID仍然会增加,并且不会通过点击索引进行“重置”

要将提交的表单变量注入会话,只需手动设置变量:

<?PHP
    if (isset($_POST['myVariable']) && !empty($_POST['myVariable'])) {
        $_SESSION['myVariable'] = $_POST['myVariable'];
    }
?>


但每次提交带有相同变量的表单时,它们都将被覆盖

在处理会话时,您必须始终将“
会话\u start()
”放在第一位。。。然后您可以执行
isset
测试。也就是说,颠倒你的前两行代码,它应该会像预期的那样工作。实际上你可以使用“if(!$\u SESSION){SESSION\u start()}”作为一个合法的测试,尽管希望你能控制网站的流量,并且已经知道是否有会话。哦,我不知道!在那里学到了一些新东西。。。谢谢SilvertigerSee下面是我的答案。。应该是这样的:我已经更改了代码,但现在它不会破坏会话,即使浏览器关闭。关闭浏览器时,会话并不总是破坏,请检查php.ini文件中的“session.cookie\u life”并查看会话的生命周期有多长。尝试添加session\u set\u cookie\u参数(0);上述会话_start();感谢Silvertiger,您能告诉我如何使用会话维护对象的状态吗?我想做的是,每当表单发布到文件时,数据都会附加到实例变量,您能告诉我该怎么做吗?谢谢您,我已经更改了代码,但会话应该在我关闭浏览器后立即销毁正确的?但是我重新启动了浏览器,它仍然会将值增加到上一个值是否关闭浏览器,或者只是浏览器中的一个选项卡?离开浏览器时会话不一定会被破坏,这取决于浏览器。通常我使用Google Chrome开发,并使用匿名模式,这会创建一个会话,当浏览器正是出于这个原因关闭时,该会话将被销毁,但不使用匿名模式的Chrome会在会话过期之前将会话保留一段设定的时间。在使用POST数据之前,请确保对其进行清理,以防止脚本注入攻击进入代码。
<?php 
if (!$_SESSION){
    session_start();
    $_SESSION['id'] = 1;
    echo "Session has been initiated at index.php and id is =". $_SESSION['id'];
} else {
    session_start();
    $_SESSION['id']++;
    echo "The session id is  : ".$_SESSION['id'];
}
?>
<br>
<a href="index.php">Index.php</a>
<?PHP
    if (isset($_POST['myVariable']) && !empty($_POST['myVariable'])) {
        $_SESSION['myVariable'] = $_POST['myVariable'];
    }
?>