【问题标题】:CodeIgniter, PHP and reloading the front page when session is destroyedCodeIgniter,PHP和会话被破坏时重新加载首页
【发布时间】:2013-04-18 14:41:32
【问题描述】:

我正在尝试创建一个用户应该能够注册、登录和注销的网页。这一切都很好,但是,用户需要按两次“退出”按钮才能重新加载页面,或者至少我是这样认为的......

这里有一些代码:

这是我的页面顶部,带有登录/注销选项

<div id="topmenu">
        <?php

        if(!isset($_SESSION['check'])) {
        echo ' Welcome, <a href="/index.php/login/">Log In</a> <a href="/index.php/register/">Register</a> ';
        }
        else {
        echo ' Welcome, ' .$_SESSION['name'] .'! <a href="/index.php/login/destroy/">Sign Out</a>'; 
        }

        ?>
</div>

以下是登录控制器中的destroy函数的作用

public function destroy()
    {
        session_destroy();
        $this->load->view('frontpage');
    }

当按下退出按钮时,会加载首页视图,但是顶部的这个栏(顶部菜单 div)保持不变,并且仍然显示退出选项,即使会话已被破坏

【问题讨论】:

  • 如果你此时只是加载一个视图,我猜仍然会设置所有内部变量。不要在此处加载视图,而是重定向到首页,以便发出新请求,CI 可以从一开始就确定没有登录用户。

标签: php codeigniter session


【解决方案1】:

来自PHP.net

session_destroy() 销毁与当前会话关联的所有数据。 它不会取消设置任何与会话关联的全局变量,也不会取消设置会话 cookie。

您必须强制页面加载,例如重定向,才能摆脱它。

替换 $this->load->view('frontpage');重定向('frontpage'); 重定向到名为 frontpage 的控制器 或者 重定向(current_url()); 重定向到当前页面。

使用 CI 的 session class 也可能会获得更好的结果。

【讨论】:

    【解决方案2】:

    在下次重新加载之前,变量仍将被初始化,使用 unset($_SESSION['check']) 手动取消设置检查变量或使用重定向。

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多