[英]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.