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