簡體   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