我使用基于Flash的消息类来向用户发送消息。
在一个名为Backup的特定页面中,用户可以恢复备份,它将执行恢复,然后执行以下操作(自定义功能相当自我解释):
ASSession::destroySession();
ASSession::startSession();
$mg = new Messages();
$mg->add('s', $prepend);
redirect("login.php");
我看到的问题是,当我们销毁会话时,我们必须启动一个新的会话,以便显示消息(使用会话变量来存储消息)。但是,一旦用户在重定向后进入登录页面,页面就会调用一个主框架'也调用ASSession::startSession()
的文件。所以我想我首先要检查startSession()
函数中是否有会话ID,因为我们应该在重定向之前启动会话,因此当我们登录时不需要启动新会话这也会在用户查看之前删除该消息。
所以我做了这个改变:
public static function startSession()
{
if (!session_id()) {
ini_set('session.use_only_cookies', SESSION_USE_ONLY_COOKIES);
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], SESSION_SECURE, SESSION_HTTP_ONLY);
session_start();
//session_regenerate_id(SESSION_REGENERATE_ID);
}
}
无济于事。我为session_start()
运行了一个完整的网站范围查找,看看它是否在其他地方启动,而不检查它是否已经启动并且显示为负数。所以我的问题是:为什么我的会话在我启动之后重新启动,如果处理启动会话的唯一函数检查会话当前是否正在运行?因为我的消息没有显示:(
旁注:我正在努力避免可怕的?success='It worked'
和echo $_GET['success'];