在 PHP 中销毁/重启不同的会话

Destroy / Restart a different session in PHP

我总能在这里找到问题的解决方案,但我在这方面遗漏了一些东西。这是我的问题:

我有一个 login.php 页面,可以根据人们的状态(会员、专家、管理员)将他们重定向到不同的页面。按钮的类型是提交按钮:

<input type="submit" name="LOGIN" ...

我在 PHP 中使用 :

获取了表单的所有信息(登录名、密码)

if(isset($_POST['LOGIN'])) { ...

并且用户被重定向到具有特定权限的页面。

但如果用户的状态为“会员”,则意味着这是他的第一次访问,他必须使用 Header("Location: loginNewMb.php"); 转到中间页面 (loginNewMb.php) 输入他的坐标(姓名, 公司...)。然后,他的状态将是“注册会员”,他将能够访问他的 data.php?member=XXX 页面。但是当他进入 loginNewMb 页面时,他仍然处于来自 login.php 页面的会话中。所以我需要关闭它并根据他将提供的信息创建一个新的。希望你还在我身边。

我只是想知道您是否可以指导我作为做到这一点的最佳策略。我应该如何以及在哪些文件中销毁/重新启动新会话?有更好的方法吗?我不一定需要一些代码,只需要一些线索来指导我。

谢谢

您可以在 loginNewMb.php 页面顶部做一个 session_destroy()session_regenerate_id(true)

或者您可以使用 $_SESSION["foo"]

取消设置特定的 $_SESSION 变量

或者,您可以在 login.php 重定向之前进行。


注:

使用 session_destroy() 后,您必须再次使用 session_start() 才能使用 $_SESSION 变量。

用 JS 做这件事并不是很好,因为任何用户都可以禁用 JS。所以,使用PHP是最好的方法。

当然,您可以将以下内容放在 loginNewMn.php 文件的开头。

            /** clear session variable */
            session_unset();
            /** destroy the session */
            session_destroy();
            /** end the current session and store session data. */
            session_write_close();
            /** clear cookies */
            setcookie(session_name(), '', ['expires' => 0, 'path' => '/']);
            /** clear old session id */
            session_regenerate_id(true);
    
            /** start the (new) session */ 
            session_start();