【问题标题】:php Session doesn't destroyphp 会话不会破坏
【发布时间】:2012-06-29 17:24:20
【问题描述】:

我建立了一个网站,它有一个登录表单,当用户登录时,登录表单不会出现,而是会出现一个退出

我的问题是当用户退出会话时不会破坏

当用户登录时,我进入功能运行,当用户退出时,我进入功能退出

HTML

<?php
        Session::init();
        $l = Session::get('loggedIn');
        if (isset($l) && $l==true) {
                ?>
        <a href="<?php echo URL; ?>login/signout" class="smallLink">sign out</a>
            <?php

        } else {
            ?>
            <a href="login/run">Sign in</a>
            <br/>
            <form action="<?php echo URL;?>login/run" method="POST">
                <div class="staticSignin">
                    phoneNumber
                    password
                </div>
                <div id="userInputSignin">
                    <input type="text" name="MNumber"/>
                    <input type="password" name="password"/>
                    <input type="image" src="http://localhost/Mar7ba/public/images/signinButton.png"/>
                </div>
            </form>
            <?php
        }
        ?>

运行登录

Session::init();
            $row = $sth->fetch();
            $ID = $row['ID'];
            $rollID = $row['rollID'];
            Session::set('loggedIn', true);
            Session::set('ID', $ID);
            Session::set('roolOfUser', $rollID);

退出

 public function signout() {
        Session::set("loggedIn", false);
        Session::destroy();
        $this->view->render('index/index');
    }

会话类

<?php

class Session {

    public static function init() {
        session_start();
    }

    public static function set($key, $value) {

        @$_SESSION[$key] = $value;
    }

    public static function get($key) {
        if (isset($_SESSION[$key]))
            return $_SESSION[$key];
    }

    public static function destroy() {
        unset ($_SESSION);
        session_destroy();
    }

}

退出时,登录表单不出现

【问题讨论】:

  • 而不是使用 unset ($_SESSION);尝试 session_unset();
  • @MrD 我试过了,还是出现退出按钮,登录表单没有出现
  • 打印出 $_SESSION 变量,看看你得到了什么?你应该使用 session_unset();始终避免与全局变量有关的问题,而不是未设置 ($_SESSION)
  • 当我尝试回应它时,我有这个异常Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in C:\xampp\htdocs\Mar7ba\libs\Session.php on line 21,也许这次出现异常是因为我在销毁会话后退出
  • @MrD 现在当我从 html 代码中删除 Session::init() 时,登录表单总是出现并且退出按钮永远不会出现

标签: php html session


【解决方案1】:

要销毁会话,您需要先使用session_start() 启动它,看来您没有这样做

试着去做:

session_start();

// Deleting all content in $_SESSION
$_SESSION = array();

// Destroying the session
session_destroy();

编辑 1

尝试在destroy() 中进行这些更改以测试会话是否真正开始:

public static function destroy() {

    session_start();

    // Deleting all content in $_SESSION
    $_SESSION = array();

    // Destroying the session
    session_destroy();

}

【讨论】:

  • 不,我正在使用 session_start();看看 Session:init(),我已经尝试过你的解决方案,但问题仍然存在
  • 当我从 HTML 中删除 Session:init() 时,退出按钮永远不会出现
  • @tottiroma,尝试按照我在编辑 1 中所说的去做,然后告诉我会发生什么。
猜你喜欢
  • 2013-11-10
  • 1970-01-01
  • 2015-07-02
  • 2012-07-19
  • 2013-10-31
  • 2010-10-05
  • 2016-04-30
  • 2013-02-12
  • 1970-01-01
相关资源
最近更新 更多