0

我有一个 index.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;
?>

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

4

6 回答 6

1

您必须拥有您所拥有的 phpindex.php代码main.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

于 2013-09-10T04:54:45.580 回答
1

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

于 2013-09-10T04:45:44.397 回答
0

这是我理解的

 <?php

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

这是您在 index.php 中为会话变量分配值的地方。这只有在您提交表单而不更改您选择的值的情况下才会执行。 因为表单最初没有任何操作价值。

<form action="">

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

否则没有分配给$_SESSION['user']$_SESSION['pass'] 的值。

因此,如果您更改选择中的值并在表单重定向到 Exam1/main.php 时提交表单,则没有分配给$_SESSION['user']$_SESSION['pass'] 的值

于 2013-09-10T04:57:53.053 回答
0

尝试这个:

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

你也错过了一个关闭}

于 2013-09-10T04:51:49.643 回答
0

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

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

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

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

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

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

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

于 2013-09-10T04:47:38.683 回答
0

您是否在以下位置使用和更改$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']...

于 2014-03-21T11:14:52.873 回答