繁体   English   中英

登录到首页之前的“规则”页面后,Codeigniter重定向

[英]Codeigniter redirect after login to a Rule page before home page

登录后如何重定向到“规则页面”,用户需要在该页面上同意在回家之前陈述的规则。 如果不同意,请注销。

我设法加载了规则页面,但规则页面位于内容部分,因此它也加载了规则页面和整个标题菜单。 当用户单击标题菜单时,他们将被重定向到另一个页面,而无需同意规则。

控制器:user.php

在控制器类中:

protected function ensureRulesPassed() {
if ((int)$this->input->cookie('rules-gate') !== 1)
                redirect("user/page/rules");}


function login(){
$POST["id"]=strtoupper(trim($this->db->escape_str($_POST["id"])));
        if(!isset($_POST["id"]) || empty($_POST["id"]) || !isset($_POST["pw"]) || empty($_POST["pw"])) exit("Please complete all fields!");
        $r=$this->mylib->user_login(strtoupper($_POST["id"]), base64_encode(md5($_POST["pw"])));
$this->ensureRulesPassed();
}

控制器:rules.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Rules extends CI_Controller {
  public function index() {
$this->load->view('user/page/rules');

}

  public function accept() {
$cookie = array(
  'name'   => 'rules-gate',
  'value'  => 1,
  'expire' => '86500',
  'domain' => '.some-domain.com',
  'path'   => '/'
);
$this->input->set_cookie($cookie);
exit('Logging in..<script language="JavaScript" type="text/javascript">location.href="'.site_url("user/page/how-to-play").'";</script>');

}

结果:它不断加载some-domain.com/user。

文件夹路径视图:用户/规则

查看:rules.php

        <form >
            <fieldset>
                <legend><h2>Rules</h2></legend>
                <?php echo $r["ticker_descr"];; ?>
            </fieldset>

<a href="<?php echo site_url("rules/accept"); ?>">  <div class="medium primary btn" style="float:right;"><input type="button" value="Agree" name="submit1" /></div></a>

<a href="<?php echo site_url("user/logout"); ?>"><div class="medium primary btn" style="float:left;"><input type="button" value="Not Agree" name="submit2" /></div></a>
        </form>

在您的控制器上编写一个方法,检查是否为rules-gate设置了cookie:

protected function ensureRulesPassed() {
    if ((int)$this->input->cookie('rules-gate') !== 1)
         redirect(base_url('/rules'));
}

在控制器的构造函数中,调用$this->ensureRulesPassed();

这是重要的部分:

为规则页面创建一个NEW控制器,这样规则控制器将具有一个新的构造函数,并且不会调用ensureRulesPassed()方法(因为这将创建一个重定向循环)

然后,您必须从规则控制器上的获取确认请求中设置“规则门” cookie:

class Rules extends CI_Controller {
  public function index() {
    $this->load->view('rules');
  }

  public function accept() {
    $cookie = array(
      'name'   => 'rules-gate',
      'value'  => 1,
      'expire' => '86500',
      'domain' => '.some-domain.com',
      'path'   => '/'
    );
    $this->input->set_cookie($cookie);
    redirect(base_url());
}

注意:如果您想知道的话,规则视图上的“接受”按钮应该指向/rules/accept

将标题菜单与要为规则页面加载的视图分开可能是一个好主意。

我通常创建一个包含...的head.php文件和一个包含菜单的header.php文件。

然后就不加载头文件。

然后,您可以使用会话布尔值变量来强制用户同意规则。 如果为假,并且用户尝试在未经同意的情况下访问页面,则可以使用例如错误消息将其重定向回规则页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM