会话变量不会改变

时间:2012-08-22 15:14:15

标签: php session

我想将一个会话变量传递给其他页面。在我的第一页上我有:

<?php 
session_start();
?>

然后:

<form class="form1" method="post" action="contact2.php" id="form1">
    <ul>
        <li>
            <label for="name">*Name:</label>
            <input type="text" name="name" placeholder="Black Nova"class="required" role="input"          aria-required="true"/>
        </li>
        <li>
            <input id="submit" class="submit .transparentButton" value="Next" type="submit" name="submit"/> 
        </li>
    </ul>
    <br/>
</form>

<?php
  $_SESSION['name'] = $_POST['name'];

  echo $_SESSION['name'];
?>

contact.php我的会话开始,但我无法获得sesssion变量。

如果在我的第一页中,我没有给出任何动作,我在$_SESSION['name']中得到了正确的值,但如果我给出一个动作,会话变量就不会改变。为什么呢?

3 个答案:

答案 0 :(得分:1)

如果您不提供操作,则表单会被提交到同一页面,因此$_POST具有价值,因此您可以将其分配到$_SESSION。当您将操作设为contact2.php时,表单会提交到其他页面,因此$_POST将无法在包含该表单的页面中使用,因此会话将不会从中获取任何值。

如果您已将操作设置为contact2.php,则可以在该页面中执行session_start()并移动代码

<?php
$_SESSION['name'] = $_POST['name'];
echo $_SESSION['name'];
?>

进入该页面,您应该能够在contact2.php

中回显会话

答案 1 :(得分:1)

因为如果你不提供任何动作,表单将提交给自己(同一页面)并且因为你在第一页中设置会话变量它会填充会话变量。当您将操作添加到第二页时,它永远不会填充会话变量,因为第一页没有收到$ _POST,第二页是。

如果您将表单数据提交到其他页面,则需要在接收页面上设置会话数据而不是发送页面。

答案 2 :(得分:0)

当您单击表单中的提交时,表单将发送给您contact2.php(action =“contact2.php”)。 创建contact2.php并在下面编写代码:

  session_start();

  session_regenerate_id();

  $_SESSION['name'] = $_POST['name'];

  echo $_SESSION['name'];