【问题标题】:session_destroy() with multiple sessionssession_destroy() 有多个会话
【发布时间】:2013-02-23 12:05:00
【问题描述】:

我的页面中有 3 个登录表单,单击注销会破坏所有会话并将它们全部注销。 我知道 session_destroy() 会销毁与当前会话关联的所有数据,但我可以给它一个参数还是有什么方法可以指定要销毁哪个会话? 我曾尝试在没有 session_destroy 的情况下使用 unset 但它不会注销用户

代码已编辑:

<?php
    if(isset($_GET['auth'])){
        if($_GET['auth']=='parent'){
        session_name('parent');
        session_start();
            if(isset($_SESSION['parent']))
                unset($_SESSION['parent']); 
                session_destroy();
    }}
    if(isset($_GET['auth'])){
        if($_GET['auth']=='employee'){
        session_name('employee');
        session_start();
            if(isset($_SESSION['employee']))
                unset($_SESSION['employee']); 
                session_destroy();
    }}
    if(isset($_GET['auth'])){
        if($_GET['auth']=='student'){
        session_name('student');
        session_start();
            if(isset($_SESSION['student']))
                unset($_SESSION['student']); 
                session_destroy();
    }}

    header("Location: login.php");
    ?>

我添加了 session_name 以获取不同的会话,我可以销毁会话,但我不能在同一页面中拥有多个会话!

【问题讨论】:

  • 你有一个会话。
  • 你只有一个会话。
  • 记住:会话是客户端得到的。您的网站访问者只能是学生、员工或家长。它们不能是它们的组合。即使可能是组合(父母和员工),PHP 也只会向客户端发出一个会话。
  • 您要删除当前用户以外的会话吗?您可以直接删除 *session_path*/sessions 但这可能不是您想要的
  • 哎呀!所以改变会话不能仅仅通过改变参数来完成吗? session_name 有帮助吗?

标签: php session logout


【解决方案1】:

请使用 session_start();一次在页面顶部。 成功登录后,请检查所有设置的会话,例如您的情况。

$_SESSION['parent'];
$_SESSION['employee'];
$_SESSION['student'];

session_name('');将覆盖前一个会话的名称,因此您不必在此处使用 session_name。 如果您检查特定会话的值或会话名称是否存在 未设置($_SESSION('your_session_key')); 希望它会奏效。 谢谢

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2011-08-07
    • 1970-01-01
    • 2013-05-27
    • 2012-04-15
    • 2013-06-26
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多