【问题标题】:CodeIgniter authentication concept issueCodeIgniter 身份验证概念问题
【发布时间】:2011-10-05 11:28:15
【问题描述】:

我制作了 CI 身份验证控制器,允许用户登录网站,登录后我将他重定向到我一直使用的之前访问过的 URL:

$this->session->set_flashdata( 'return_url', current_url() );

不幸的是,这会导致问题。每次当用户在浏览器中打开多个选项卡时,该变量都会被覆盖,并且在成功登录后,用户会被重定向到所有选项卡中的相同 URL。

所以我的问题是:是否可以在 MY_Controller 中加载自定义控制器?MY_Controllerextends CI_Controller 的类)

我尝试使用(在MY_Controller 的构造函数中)但没有成功:

$CI =& get_instance();
$CI->router->set_class('authentication');
$CI->router->set_method('login');

编辑:我会感谢解决此问题的任何其他想法。

【问题讨论】:

  • 不,在 CI 中你不能用另一个控制器调用一个控制器。
  • 为什么不使用自动加载的模型进行身份验证?我将身份验证系统编写为模型并自动加载它,但从未遇到过问题。我什至在构造方法中定义了定义,这甚至使我的代码更整洁+更易于阅读。

标签: php codeigniter authentication


【解决方案1】:

解决方案不是将返回 url 保存在会话 var 中,而是在 get/post 参数中传递它(在 get 的情况下,正确编码,base64 即)。如果未设置(有效)返回 url,则唯一添加必须是标准返回 url

--- 编辑 为什么我在谈论 base64 时 php 只具有此功能; urlencode 是你的朋友! http://nl3.php.net/urlencode

【讨论】:

  • base64 的哈希包含斜杠,并且与 codeigniter 的 url 混淆
  • 我已经设法避免了这个斜线问题,方法是在编码后用感叹号替换所有斜线,然后在解码字符串之前反转它们。
【解决方案2】:

要在控制器(例如 MY_Controller)中加载自定义控制器,请使用 php CURL 获取身份验证控制器。

这可能会影响性能,因为这对每个请求都是一个昂贵的过程。

其他选项可以包括使用基类系统(请参阅http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY)或创建自动加载的库来处理身份验证。

【讨论】:

    【解决方案3】:

    当您将未登录的用户重定向到登录页面时,请保留一个隐藏变量“redirect_to”,该变量将保存用户到达位置的值。可以使用 $_SERVER['HTTP_REFERRER']。然后登录后,只需重定向到“redirect_to”的值。这样您就不必设置 flashdata 来从他们来的 url 重定向用户。

    【讨论】:

    • 它是$_SERVER['HTTP_REFERER'],当你用php header重定向用户时不能使用
    猜你喜欢
    • 1970-01-01
    • 2015-02-27
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多