我正在尝试在我的一个脚本中保存会话变量,它似乎对脚本的一部分工作正常,但是,它会在我的代码的第二部分中被删除。我已经回应了每一条线,无法弄清楚为什么会发生这种情况。此外,此代码之前工作正常,但自从我切换服务器后,它似乎出现故障。我不认为它是会话保存路径,因为代码的第一部分工作正常。这是我的代码的基本外部结构(我删除了所有不相关的部分以节省空间):
<!--raw-->
<?php
session_start();
include 'config.php';
?>
<html>
<body>
<form id="driver_record" method="post" action="<?php echo htmlentities($PHP_SELF); ?>">
Enter Driver Number: <input type="text" name="driver" />
<input type="submit" value="Submit" name="user_submit" />
</form>
<?php
if(isset($_POST['user_submit']))
{
if(username_exists($_POST['driver'])){
$ulog = $_POST['driver'];
$_SESSION['user_id'] = $ulog;
echo $_SESSION['user_id']; //Session echos fine here
$tablename_cc = "cc_".$ulog;
$tablename_db = "db_".$ulog;
$tablename_misc = "misc_".$ulog;
$tablename_cash = "cash_".$ulog;
?>
<form id="expenses_update" method="post" action="<?php echo htmlentities($PHP_SELF); ?>">
<input type="submit" value="Approve" name="record_approve" />
<?php
}
}
?>
<?php
if(isset($_POST['record_approve']))
{
echo $_SESSION['user_id']; //Session does not echo here
$ulog = $_SESSION['user_id'];
$tablename_cc = "cc_".$ulog;
$tablename_db = "db_".$ulog;
$tablename_misc = "misc_".$ulog;
$tablename_cash = "cash_".$ulog;
}
//unset($_SESSION['user_id']);
//session_destroy();
?>
</body>
</html>
<!--/raw-->
编辑:我已经注释掉了未设置的语句,并尝试将它们放在if语句中,而不会改变代码的行为。
答案 0 :(得分:0)
每次运行代码时都要调用unset($ _ SESSION ['user_id']);这是因为它不在你的IF语句中,你在错误的地方有一个大括号。
<?php
if(isset($_POST['record_approve']))
{
echo $_SESSION['user_id']; //Session does not echo here
$ulog = $_SESSION['user_id'];
$tablename_cc = "cc_".$ulog;
$tablename_db = "db_".$ulog;
$tablename_misc = "misc_".$ulog;
$tablename_cash = "cash_".$ulog;
unset($_SESSION['user_id']);
session_destroy();
} //moved curly brace here
?>
编辑:代码运行正常,我必须注释掉include行和使用的函数,故障必须在config.php中。你是否在该文件的顶部有一个session_start()并且没有使用过unsets?
答案 1 :(得分:0)
这是一个简单的会话脚本,你有这个问题吗? 如果是这样,那么php就会出现问题。
<?php
session_start();
$_SESSION['testing'] = "boo";
echo "Session 1=" . $_SESSION['testing'];
?>
<form action="session1.php" method="post">
<input type="text" name="input"
<input type="submit" />
</form>
<pre>
<?php
if (isset($_POST['input']))
{
print_r ($_SESSION);
print_r ($_POST);
}
?>
答案 2 :(得分:0)
似乎我或其他任何人都无法找到正在发生的事情的逻辑解决方案。我决定简单地删除会话变量并包含一个'隐藏'输入字段,它只是通过POST变量发送变量。这似乎解决了我的所有问题,而不必担心会话变量的行为。
答案 3 :(得分:-1)
仅在提交第一个表单(isset($_POST['user_submit'])
)时设置会话值。当脚本正在处理第二个表单提交(isset($_POST['record_approve'])
)时,不会设置任何会话值。因此没有输出。
你确实意识到,即使脚本在一个PHP文件中,它也会被两个互斥的表单提交触发,对吧?因此会话值仅在isset($_POST['user_submit']
之后可用。因此,如果您在提交第一个表单后提交第二个表单,则会有一个会话变量'user_id'
,前提是您已注释掉未设置并销毁会话的行。
希望它有意义。