操作后会话变量 删除


POST action SESSION variables Deletes

我有一个索引.php包含一个用于更改表单操作的 JavaScript 代码

<script>
window.onload=function() {
document.getElementsByName("myproject")[0].onchange=function() {
var path = this.value;
if (path) this.form.action=path+'/main.php';
}
}
</script>
每次我更改

其值时,此脚本都会更改我的表单操作,然后我还有一个

<form action = "" method = "POST"><table>
<td>Select Project: </td><td><select name="myproject" id="myproject">
<td>USERNAME: </td><td><input type="text" name="user" id="user"/></td>
<td>PASSWORD: </td><td><input type="password" name="pass" id="pass"/></td>
<option value="">Please Select</option>
<option value="Exam1">Exam1</option>
</select></td>
<input type = "submit" name="login"/>
</form>

我还有一个PHP代码。 这个我得到了

<?php
session_start();
error_reporting(0);
$_SESSION['user'] = "";
$_SESSION['pass'] = "";
if ($_POST['login'])
{ 
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
?>
当我重定向到我的 Exam1/main.php

时,我丢失了 SESSION 变量。 我的 Exam1/main.php 包含此代码以确定我是否获得了会话变量

<?php
session_start();
error_reporting(0);
$mainuser = $_SESSION['user'];
$mainpass = $_SESSION['pass'] ;
echo $mainpass.$mainuser;
?>

为什么我会丢失会话变量。

您正在初始化会话两次session_start()我们

你必须

main.php中拥有你index.php的php代码。您的表单操作main.php

<?php
session_start();
error_reporting(0);
$_SESSION['user'] = "";
$_SESSION['pass'] = "";
if ($_POST['login'])
{ 
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
?>

由于重定向是main.php $_POST数据在那里可用,只能分配给$_SESSION

假设 PHP 与表单输入位于同一文件中,这应该都可以工作。要检查的几件事是确保您的 Apache 配置允许_SESSION数据,我知道有些主机默认关闭此功能,尽管没有好的主机这样做。

还要确保在需要会话数据的任何其他脚本之前在开头初始化 session_start()。

如果情况可能并非如此,那么我想的是你以某种方式重置变量。尝试删除:

$_SESSION['user'] = "";
$_SESSION['pass'] = "";

因为当使用实际信息设置它们时,这是半冗余的。

只是一个附带提示,因为我相信您会将其用于登录表单,请注意您的安全措施。连接数据库后,使用存储的 $_SESSION 用户和密码 (md5'ed) 在每个安全页面上确认身份验证。

如果你想要一个示例,我有一个我使用的脚本,我可以分享。

试试这个:

更改if ($_POST['login'])if (isset($_POST['login']))

而且您还缺少一个接近}

这就是我的理解

 <?php
    if ($_POST['login'])
    { 
    $_SESSION['user'] = $_POST['user'];
    $_SESSION['pass'] = $_POST['pass'];
    }
    ?>

这是为索引.php内的会话变量分配值的地方。仅当您提交表单而不更改所选值时,才会执行此操作,因为表单最初没有任何操作值。

<form action="">

因此,它将被提交到同一页面,并将 $_POST['user'] 分配给 $_SESSION['user']

否则,不会为 $_SESSION['user']

$_SESSION['pass'] 分配任何值。

因此,如果您更改所选值并在表单重定向到 Exam1/main 时提交表单.php则不会为 $_SESSION['用户'] 和 $_SESSION['pass'] 分配任何值

您是否在以下某个地方使用和更改$user$pass的值:

$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];

我现在不知道它是错误还是设计使然,但是:

$_SESSION['a']=10;
echo "{$_SESSION['a']}<br>"; //will print 10
$a=20;
echo "{$_SESSION['a']}<br>"; //will print 20!

当我使用$_SESSION['id']时,这对我来说是一个很大的惊喜......