如何在删除前一个会话后创建新会话



我正试图在完成销毁会话后设置会话,这是我的代码:

session_start();
$_SESSION = array();
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();setcookie(session_name(), '', time() - 0,$params["path"], $params["domain"],$params["secure"], $params["httponly"]);
}
session_destroy();
$_SESSION['message-success-l']='Email changed, now you can login!';
header ('location: https://example.com/login');
die();

//php登录

session_start();
echo "$_SESSION['message-success-l']";

因此,在更改电子邮件后,所有会话都将被销毁,用户现在可以重新登录,但在完全销毁会话后,我希望设置一个会话,说明更改成功。

但当我进入登录页面时,我没有看到会话消息,为什么?

我永远不会只为一条消息使用会话。。。不管怎样,这是的工作代码

会话销毁.php

<?php
session_start();
// YOUR CODE
session_destroy();
header("Location: email-changed.php");
?>

电子邮件已更改.php

<?php
session_start();
$_SESSION['test'] = "Email changed, now you can login!";
header("Location: home.php");
?>

home.php

<?php
session_start();
echo $_SESSION['test'];
?>

错误:
echo"$_SESSION['message-success-l']";->echo$_SESSION['message-success-l'];//不带引号,
$_SESSION=array((;//为什么要使用数组
(老实说,我不知道(您不能在session_destroy((之后创建新会话
对不起我的eng,我希望这对有用

这是因为当$_SESSION变量刚刚被销毁时,您正在设置它,这意味着没有会话。

我觉得你把事情搞混了。让我们考虑一下的工作流程

你进入一个页面,想要session_start();

你想做的是:无论何时更改或注销电子邮件(假设有注销功能,因为大多数电子邮件都可以更改(,你都需要在该操作结束时使用session_destroy();

就是这样。每当session_destroy();命中,它就不见了。无论何时启动,都会启用

如果您想创建会话变量并在其中放置内容,那么中间的操作取决于您。要维护一个页面到另一个页面的会话,只需在每个所需页面维护session_start();即可。

重复:一旦它被摧毁,它就被摧毁了。你在代码中所做的是启动一个会话(或从上一页/操作中维护它(,然后(不知道为什么你在那里有$_session,它毫无价值(验证它,最后销毁它。

如果你刚刚销毁了一条消息,为什么要把它发到你的$_SESSION?此时没有会话。你可以在之后写session_start(),但话说回来,当你重定向到登录时,很可能有一个开始,为什么你要开始->销毁->重新开始?

最新更新