无法在PHP-Windows服务器中取消设置或删除会话变量

无法在PHP-Windows服务器中取消设置或删除会话变量,php,mysql,session,post,session-variables,Php,Mysql,Session,Post,Session Variables,首先,感谢您为我提供的帮助。:) 我们有一个带有PHP站点、mysql数据库的Windows服务器。 windows服务器的版本是,它还不支持.htacces,因此,我们有一条规则,即每个404错误都会被重新检测到redirect.php 当然,我们有一个会话处理程序,它会写入会话表 问题在于帖子和访问网址。 我有一个解决方案,跳过这个,将表单操作设置为redirect.php将$\u SESSION['lastPost']变量设置为等于$\u POST,除了$\u POST['redirect

首先,感谢您为我提供的帮助。:)

我们有一个带有PHP站点、mysql数据库的Windows服务器。 windows服务器的版本是,它还不支持.htacces,因此,我们有一条规则,即每个404错误都会被重新检测到redirect.php

当然,我们有一个会话处理程序,它会写入会话表

问题在于帖子和访问网址。 我有一个解决方案,跳过这个,将表单操作设置为redirect.php将$\u SESSION['lastPost']变量设置为等于$\u POST,除了$\u POST['redirect']什么是重定向url。当我重定向到url($\u POST['redirect'])时,我将$\u会话['lastPost']恢复到$\u POST并取消设置($\u会话['lastPost'])

在搜索之前,这一切都很完美。由于使用ajax进行搜索,我必须将搜索参数设置为$\u会话,之后,我无法取消设置$\u会话变量。(Auto Globals也在我们的服务器上)

如果我对设置了$\u会话值的行进行注释,这将非常有效

我知道我不应该操纵超全局变量,但由于url很好,我无法解决其他问题

我读了大部分会话未设置和会话删除问题,但没有我的解决方案。 我有session_start(); 我在上次$_会话变量赋值到会话_write_close()后进行了尝试;但这对我没有帮助

redirect.php

require_once("###########/inc/session.php"); //that is the right location

if (isset($_POST['redirect']) && !empty($_POST['redirect'])) {

$strRedirect = $_POST['redirect'];

unset($_POST['redirect']);

$_SESSION['lastPost'] = $_POST;

unset($_POST);

redirect(urldecode($strRedirect));

exit();
}
search.php

require_once("###########/inc/session.php"); //that is the right location

if (isset($_SESSION['lastPost']) && !empty($_SESSION['lastPost'])) {

$_POST = $_SESSION['lastPost'];

unset($_SESSION['lastPost']);

}
//如果我注释掉下面的session变量赋值,$\u session['lastPost']将变为null,否则它将永远不会变为null

if (!empty($_POST['job_types_id'])) {

$strJobTypesWhere = "`job_types_id` = '" . (int) $_POST['job_types_id'] . "'";

$_SESSION['job_search'][] = $strJobTypesWhere;

}
当我第一次发布时,工作正常,$\u post获得$\u SESSION['lastPost']值,之后,当我转储$\u SESSION['lastPost']时,它是空的,下面应该是结束。。。 在nice url上进行简单刷新而不发布到重定向后,$\u会话['lastPost']包含上一个$\u POST。。。而且我不能移除


感谢您为我提供的帮助,也为我的英语感到抱歉:)

因此,主要问题是:如果我在unset($\u session['lastPost'])之后设置了任何会话变量,$\u session['lastPost']将不会在
unset
之后被删除,请尝试打印
$\u session['lastPost']
,如果它没有显示你的代码,那么你的代码就可以正常工作,并且在某个地方添加它。尽可能通过显示来调试。谢谢:)我已经试过了,在取消设置之前和之后都试过了,效果很好。在$\u会话之前['lastPost']是一个数组,$\u POST是空的,在$\u POST之后是与$\u会话['lastPost']相同的数组,并且$\u会话['lastPost']是空的,即使在页面底部也是空的。另外,我不确定您是否可以这样分配
$\u POST=$\u会话['lastPost']
因为
$\u POST
只需要在表单实际提交后才能提交。为什么不为此使用普通数组?不确定这是否有用,但在刷新页面时,您的帖子值将重新提交。我找到了解决方案。会话变量分配错误。我确实想传递给会话变量的字符串包含非法字符,如“%/”。我注释掉了分配,之后对我有效,我将值传递给了bas64_编码的会话。原始>$_会话['job_search'][=$strOrWhere;新表单>$_会话['job_search'][=base64_encode($strOrWhere);这就解决了我的问题。感谢所有试图帮助我的人。总是学习新的东西。