将会话变量传递到3页以上并返回php

时间:2014-05-15 09:56:44

标签: php html forms session

第一页(inputform1test.php)

    <?php require_once('Connections/Project.php'); ?>
<?php

if (!isset($_SESSION)) {
  session_start();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Input (Test)</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="inputdisplaytest.php">
  <p>Name 
  <input type="text" name="name" id="textfield" />
  </p>
  <p>Text 
    <input type="text" name="text" id="textfield2" />
  </p>
  <p>
    <input type="submit" name="button" id="button" value="Submit" />
  </p>
</form>
</body>
</html>

第二页(inputdisplaytest.php) 测试它是否在第二页(inputdisplaytest.php)中工作

<?php include('Connections/Project.php'); ?>
<?php

if (!isset($_SESSION)) {
  session_start();
}

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

?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Display Input (Test)</title>
</head>


<body>
<table width="200" border="0">
  <tr>
    <td><?php echo $_SESSION['name']?></td>
    <td><?php echo $_SESSION['text']?></td>
  </tr>
</table>
<a href="inputdisplaytest_2.php">inputdisplaytest_2.php</a>
</body>
</html>

第三页(inputdisplaytest2.php) 这是我收到错误的部分

<?php include('Connections/Project.php'); ?>
<?php

if (!isset($_SESSION)) {
  session_start();
}

?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Display Input (Test)</title>
</head>


<body>
<table width="200" border="0">
  <tr>
    <td><?php echo $_SESSION['name']?></td>
    <td><?php echo $_SESSION['text']?></td>
  </tr>
</table>
<p><a href="inputdisplaytest.php">inputdisplaytest.php</a></p>
</body>
</html>

我点击查看它是否仍在第二页上工作。 (哪个不行) 当我通过浏览器点击后退按钮时,当我转到超链接和“文档已过期”时,我得到了undefinex索引问题。

如何让会话变量返回/不过期? 任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

你不需要

if (!isset($_SESSION)) {
  session_start();
}

在脚本开始时使用session_start()。甚至在那些包括之前。

您无法在session_start之前打印任何内容。检查日志中的错误。

答案 1 :(得分:0)

我相信您发现此错误的原因是因为您正在发布表单数据。当您发布表单数据时,它会在您单击“提交”时发送。返回表单将为您提供重新加载表单数据的消息。如果将其更改为GET,则表单数据应该坚持下去。

答案 2 :(得分:0)

  1. 删除您用来检查会话是否已设置的 if 语句,因为在您的情况下, session_start()永远不会被执行,由于 $ _ SESSION 数组始终由 PHP 设置,除非您执行取消设置($ _ SESSION),这将弃用,这将取消整个 $ _ SESSION 未设置($ _ SESSION),因为这将禁用通过 $ _ SESSION 超全局数组注册会话变量。所以:

    if(!isset($_SESSION)){
        session_start();
    }
    

    变为:

    session_start();
    

    这解决了未定义索引错误的问题。

  2. 要在导航回处理表单的页面时解决浏览器后退按钮错误,您必须输入:

    session_cache_limiter('private_no_expire');
    
    second.php 文件中的 session_start()之前

    ,这行代码避免&#34;页面已过期&#34; 警告,您可以在avoid "Page Has Expired" warnings找到更多解释。

  3. 最后,在 second.php 文件中的 session_start()之后,添加以下代码:

    if(isset($_POST['button'])){
        $_SESSION['name']= $_POST['name'];
        $_SESSION['text']= $_POST['text'];
    }
    

    检查表单是否已提交,如果是,您可以处理数据并显示页面,否则您只需使用会话中以前存储的数据显示页面。

答案 3 :(得分:0)

我自己也有这个问题,会话变量没有传递,最近遇到了答案。对不起,我不能相信在之前的帖子中回复此帖的人,因为我再也找不到这个帖子了。简单地说,有时候,特别是在共享主机上,会话不会存储在正确的位置。您可以通过强制将会话保存在特定位置来解决此问题。我的解决方案是:

ini_set('session.save_path',realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/session'));

我的会话文件位于域的根文件夹中。

然后我开始会议:

session_start();

然后我确保此人已登录:

if(isset($_SESSION["your_variable"])) {
$your_variable = $_SESSION["your_variable"];
//add any other session variables in the same manner
//be sure to rename "your_variable" with the name of your variable
}else{
header('Location: signin.php');
exit;
}

如果未登录或未找到会话变量,则底部的标题重定向是该人员前往的位置,以便会话变量传递到此页面。注意退出,它可以使您的代码更安全。所以我的第一行代码是:

ini_set('session.save_path',realpath(dirname($_SERVER['DOCUMENT_ROOT']) .   `'/session'));`
session_start();
if(isset($_SESSION["your_variable"])) {
$your_variable = $_SESSION["your_variable"];
}else{
header('Location: signin.php');// or wherever your sign in happens to be
exit;
}

我希望这会有所帮助。