Php 操作后会话变量删除

Php 操作后会话变量删除,php,javascript,session,Php,Javascript,Session,我有一个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> window.onload=

我有一个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>

window.onload=function(){
document.getElementsByName(“myproject”)[0].onchange=function(){
var path=this.value;
如果(path)this.form.action=path+'/main.php';
}
}
每次我更改其值时,该脚本都会更改我的表单操作,然后我还有一个

<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>

选择项目:
用户名:
密码:
请选择
Exam1
我还有一个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时,我丢失了会话变量。我的Exam1/main.php包含以下代码,用于确定我是否获得了会话变量

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


为什么会丢失会话变量。

您两次初始化会话
会话_start()
us

假设PHP与表单输入位于同一个文件中,这一切都会正常工作。需要检查的几件事是确保您的Apache配置允许会话数据,我知道有些主机默认情况下关闭了它,尽管没有好的主机这样做

另外,请确保在需要会话数据的任何其他脚本开始之前初始化会话_start()

如果不是这样的话,那么我想的是你正在以某种方式重置变量。尝试删除:

$_SESSION['user'] = "";
$_SESSION['pass'] = "";
因为这在使用实际信息设置它们时是半冗余的

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

如果您想了解我使用的脚本的示例,我可以与您分享。

试试以下方法:

更改
if($\u POST['login'])
if(设置($\u POST['login'])


您还缺少一个关闭的
}

您必须在
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
$\u POST
数据仅可用于分配给
$\u会话

这就是我的理解

 <?php

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

这就是为index.php中的会话变量赋值的地方。只有在提交表单而不更改选择中的值时,才会执行此操作。因为表单最初对操作没有任何值

<form action="">

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

否则,没有为$\u会话['user']$\u会话['pass']分配任何值


因此,如果您在表单重新定向到Exam1/main.php时更改了select和submit的值,则没有为$\u SESSION['user']$\u 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!
$\u会话['a']=10;
echo“{$_SESSION['a']}
”//将打印10个 $a=20; echo“{$_SESSION['a']}
”//将打印20个!

当我使用
$\u SESSION['id']
..

如何执行重定向时,我感到非常惊讶?请张贴所有相关的代码编辑:当我点击提交按钮登录。这就是触发表单操作的原因,它等于(Exam1/main.php),每当我更改
的值时,它都会更改表单的表单操作。在重新定向之前,您是否检查了$\u会话['user']是否具有正确的值?@dilantha,是的。首先,我在脚本中添加注释,这样我就不会有表单操作。然后我可以回显会话变量。我对流程有点困惑。您已经在index.php中设置了会话数据。我相信,当用户提交表单时,在不更改您的值的情况下,将执行该操作。但是,如果您更改了的值,然后提交,我看不到您为会话变量设置值的任何地方。我也尝试删除该变量,但是,先生,我的Exam1/main.php中没有会话,会话在页面调用php代码时启动。据我所知,php代码总是第一个被执行的。如果我错了,请纠正我。我尝试了你的答案,但我的Exam1/main.phpHow中仍然没有会话。当我在你的Exam1/main.php中更改select SIR的值时,我可以在会话中存储值吗?你可以用与在index.php中类似的方式分配值。将其添加到Exam1/main.php中。如果($\u POST['login']){$\u SESSION['user']=$\u POST['user'];$\u SESSION['pass']=$\u POST['pass'];}我使用了该代码。。我之所以更改代码,是因为当我单击main.php中的注销链接,然后单击“上一步”按钮,$\u POST变量仍然被我的main.php识别,这就是为什么它仍然登录。然后在处理注销的地方。您应该将session_destroy()和$_session['user']=”$_会话['pass']=“”;是的,我这样做了,所有的破坏都是为了破坏那一段对话,而不是破坏。这些是我的销毁代码
如果PHP设置register\u globals处于启用状态,它将以这种方式工作。