我正在尝试在完全销毁会话后设置会话,这是我的代码:
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']";
因此,在更改电子邮件之后,所有会话都将被破坏,用户现在可以重新登录,但是在完全删除会话之后,我想建立一个会话,说更改成功。
但是当我进入登录页面时,为什么看不到会话消息?
答案 0 :(得分:0)
我永远不会仅将会话用于消息...无论如何这都是有效的代码
session-destroy.php
<?php
session_start();
// YOUR CODE
session_destroy();
header("Location: email-changed.php");
?>
email-changed.php
<?php
session_start();
$_SESSION['test'] = "Email changed, now you can login!";
header("Location: home.php");
?>
home.php
<?php
session_start();
echo $_SESSION['test'];
?>
错误:
回声“ $ _SESSION ['message-success-l']”; ->回声$ _SESSION ['message-success-l']; //不带引号,
$ _SESSION = array(); //为什么要使用数组。
(老实说,我不知道)您不能在session_destroy()之后创建新会话;
对不起,我希望我能再见
答案 1 :(得分:0)
这是因为您正在设置$ _SESSION变量,而该变量刚刚被销毁,这意味着没有会话。
我认为您正在混淆。让我们考虑一下工作流程
您进入某个页面,并且想要session_start();
。
您想要做的是:每当更改或注销电子邮件时(假设有一个注销功能,因为显然可以更改电子邮件),您都希望在此操作结束时使用session_destroy();
。
就是这样。每当session_destroy();
命中时,它就消失了。每当它启动时,它将启用它
如果要创建会话变量并在其上放置内容,则由您决定要执行的中间操作。要在每个页面之间维持会话,只需在每个所需的页面维护session_start();
。
重复:一旦销毁,它就会被销毁。您在代码中所做的工作是开始一个会话(或从上一页/操作中进行维护),然后(不知道为什么在那里有$ _SESSION,这毫无价值),您对其进行验证,最后销毁它。
为什么您刚刚销毁了$_SESSION
上的邮件?目前没有会议。您可以在之后写session_start()
,然后再写一次,为什么当您很可能在重定向到登录名的地方有一个开始时,又要开始->销毁->重新开始?