使用PHP会话维护状态

时间:2014-06-10 14:53:05

标签: php session session-variables session-state

PHP无法维持状态让我们假设在一个进程中初始化的变量将在页面重新加载时丢失我正在读取Stack over flow上的一些答案但不幸的是我无法获得更多其中,我所知道的是为了维持状态我需要使用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 started at index.php and id is =1**

你能告诉我我做错了怎样才能使用Sessions维持状态? 我最终想要做的是在每个帖子的Session变量中存储一个对象我想在该对象的实例变量(数组)中追加数据

对不起我的英语不好这方面的任何帮助都会很棒

2 个答案:

答案 0 :(得分:1)

问题在于,在第一次加载时,您正在检查会话,默认情况下,在您启动会话之前不存在,然后随后启动会话并将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'];
    }
?>

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

答案 1 :(得分:0)

session_start();

<?php

您需要在引用会话之前声明会话

正如您从代码中看到的那样,您说如果没有设置,那么它就不会知道,因为您还没有开始会话。