2012-10-07 106 views
3

我有一个网站的默认控制器home。在主页上有一个登录表单,按下登录按钮调用功能validate_credentials(),这是家用控制器中的一项功能。Codeigniter隐藏功能名称,但保持功能

当用户没有输入正确的登录信息,从validate_credentials功能我称之为内:

$this->index() 

这基本上重新加载网页,并与以前的信息的电子邮件地址填写表单。我会打电话

redirect('home'); 

但我不能预先填写电子邮件地址表格,除非我创建一个会话变量。

用户输入不正确的信息后,读取网址:

http://www.example.com/home/validate_credentials

我只是想:

http://www.example.com

甚至:

http://www.example.com/home

,但使用路线

$route['home'] = 'home/validate_credentials'; 

它实际上改变被调用的功能。我只是想改变网址。这可能吗?

回答

1

那么,我会说会话存储(尤其是flashdata)是为了这个确切的目的 - 重定向某处,但传递额外的数据。如果你不想,你应该只加载一个没有重定向的视图,然后在页面中使用HTML5历史API来修改url栏的内容。

1

使验证过程成为索引函数的一部分,然后创建一个名为is_logged_in的会话变量,并在验证凭据通过时将其设置为1。

然后,它是做这样的事情非常简单:

if($this->session->userdata('is_logged_in')==1) 
{ 
    load the page here. 
} else { 
    load the login stuff here. 
} 

如果他们看到的登录表单和任何形式的验证错误传递回相同的URL,如果他们是他们没有登录这样登录他们只是去正常的页面。