我有一个登录控制器,当用户有效时,可以将其重定向到我的索引页面。重定向有效,但在索引页面上,url仍然是验证方法ex:login / validate_login /。如果我点击索引页面上的链接,然后尝试返回浏览器历史记录,浏览器会指向验证方法,而不是索引页面。
我该如何解决这个问题?
我尝试过使用重定向同时刷新和定位,但两者都没有运气。
我怀疑这是jQuery mobile的ajax调用的问题,但我不确定。
任何帮助表示赞赏。 亲切的问候
注意:我会在索引页面上发布网址图片,但我不允许这样做,因为我是新用户。
我的验证方法:
function validate_login($controller='',$method='') {
$this->load->library('form_validation');
$this->load->model('workout_model');
$this->form_validation->set_rules('ex_password','Koden','trim|required|min_length[4]|max_length[4]|callback_pw_check');
if($this->form_validation->run() == FALSE) {
$this->index();
} else {
if($query = $this->workout_model->validate()) {
$data = array(
'is_logged_in' => true,
'user_id' => $query->id,
'current_exercise' => '1'
);
$this->session->set_userdata($data);
if($controller=='' || $method=='') {
redirect("workout");
} else {
redirect($controller."/".$method);
}
} else {
$this->index();
}
}
}
答案 0 :(得分:0)
有两种方法可以解决这个问题,它与AJAX无关,就像CI的做法一样。最快捷最简单的方法是改变
$this->index();
到
redirect(index);
您执行此操作的方式实际上并未重定向,您在当前网址上调用了index_函数,即validate_login。这样做的问题是如果登录失败,它仍将保留在validate_login URL上以供下次尝试。
处理它的最好方法是从控制器中的索引函数调用实际的validate_login函数,而不是表单本身。因此,将表单发送回索引,让索引控制器检查表单数据,如果是,则调用validate_login()。这样你就不会真正离开索引页面,只是处理登录表单是否已经提交。解决URL问题。实际上,我在提交任何类型验证表单的所有页面都这样做。
答案 1 :(得分:0)
要正确更新URL,似乎需要两件事:使用重定向(...)而不是方法调用并禁用jQuery Mobile ajax调用。有两种方法:添加和归属于最初指向您的方法的链接,
<a href='.../validate_login/...' data-ajax='false'>...</a>
或者,通过编辑设置(未测试)全局禁用ajax调用。
答案 2 :(得分:0)
当您通过HTML表单提交(例如登录注册)时,您还需要进行某种仪表板重定向,您需要像这样更新表单标签。这种情况在我使用Codeigniter和jquery mobile使用时会发生 data-ajax =“ false”
func isLeap(year: Int) -> Bool {
return (year.isMultiple(of: 4) && !year.isMultiple(of: 100))
|| year.isMultiple(of: 400)
}
let aYear = Int(readLine()!)!
if isLeap(year: aYear) {
print("YES")
} else {
print("NO")
}